std :: string是STL的一部分吗?
(当我说STL时,我正在讨论围绕容器,迭代器,algorithm和仿函数的模板库。)
这个问题想到了std::string
行为就像一个普通的容器,其中包括begin
和end
函数(包括迭代器),一个函数的size
以及将所有这些函数用于容器/范围通过它们的迭代器(例如transform
, sort
, find
等)。
然而,与此同时,它不是一个容器本身,因为它不适合存储任意数据的容器图片。 另外,它主要通过成员函数(如substr
, find_first_of
等)对包含的数据进行操作,而真正的容器不会这样做,并让algorithm处理它。
另外, cplusplus参考站点和C ++标准没有将std::string
与真实容器一起列出,而是在不同的类别中。
但是,在SGI的STL站点上 , basic_string
(以及string
typedef)与另一个容器和basic_string
引用站点一起提到它属于“容器”类别。
现在我的问题是, string
实际上是STL的一部分,还是它本身是一个独特的库?
如果它现在属于STL,是不是和Stepanov开发的原始STL有所不同呢?
不,不是。 是的,有点。
“STL”有不同的定义 ,包括:
-
实际的HP / SGI STL,即原始库,C ++标准库所基于的部分。 他们包括容器,迭代器和algorithm。 string不是这个的一部分。
-
C ++标准库中基于SGI STL库的部分:容器,迭代器和algorithm。 仍然没有string。
-
所有的C ++标准库。 这个定义在逻辑或者实际上是绝对没有的,如果遵循的话,
std::string
会被包含进来。
请注意,自从C ++被标准化后(大约13年前,记得),实际的STL已经得到了发展,并且他们已经倒退了一些进入标准的东西,比如string。 这并不意味着他们原来是在1998年……但是他们现在在那里是为了“兼容”的原因。
概要
STL是容器,algorithm和迭代器。
C ++ 98采用string和stream,然后向后采用现代SGI STL。
string是否是“STL的一部分”取决于您是否遵循逻辑和原因,或者调用标准库“STL”。
希望这可以帮助。
这没有真正的答案。 一方面, std::string
完全独立于其他容器开发。 另一方面,它已经足够满足随机访问容器的所有要求。 你是否select将其归类为“STL”的一部分完全取决于你 – 最后,它只是指出了“STL”没有一个单一的,一致同意的定义,突然的机会获得明确的意义是遥远的(把它很好)。
IOW,“STL”是一个糟糕的缩写词,因为人们用它来表示至less三种不同的东西 – 但是,不幸的是,没有更好的缩略语,而且有更好的定义,因此STL仍然在使用中,并且可能会继续这样做(并继续阻碍沟通)无限期地。
它确实是STL的一部分。 而std :: string只是basic_string typedef。 这是容器,专业(不是在C ++“专业化”的意思:))的数据存储与string语义。 不知道斯捷潘诺夫。 值得一提的是STL是“标准模板库”,不仅是容器子部分。 这包括algorithm,stream和一些特征。