(当我说STL时,我是在谈论围绕容器,迭代器,算法和函子的模板库。)
这个问题是在想到std::string
在大多数情况下都像普通容器一样出现时才想到的,它具有begin
和end
函数(包括迭代器),一个size
函数,并有可能将所有这些用于在容器中使用的普通STL算法/范围内的容器迭代器(例如transform
,sort
,find
等)。
但是,与此同时,它本身也不是容器,因为它不适合存储任意数据的容器的图片。此外,它主要通过成员函数(如substr
,find_first_of
等)对包含的数据进行操作,而真正的容器则不这样做,而由算法来处理。
此外,cplusplus reference site和C++标准未将std::string
与实际容器一起列出,而是在不同的类别中列出。
但是,在SGI's STL site上,其他容器中提到了basic_string
(以及string
typedef),并且 basic_string
reference site声明它属于“容器”类别。
现在我的问题是,string
实际上是STL的一部分,还是它本身是一个独特的库?
并且,如果它现在属于STL,它与Stepanov开发的原始STL有什么不同吗?
最佳答案
不,不是。是的,有点。
There are varying definitions of "the STL",包括:
std::string
,绝对没有逻辑或现实基础。 请注意,自C++标准化以来,实际的STL就已经开发出来了(大约13年前,请记住),并且它们向后采用了一些已纳入标准的内容,例如字符串。这并不意味着它们最初是在1998年出现的……但是出于“兼容性”的原因,它们现在已经存在。
摘要
STL是容器,算法和迭代器。
字符串和流在C++ 98中采用,然后在现代SGI STL中采用后向采用。
字符串是否为“STL的一部分”取决于您是否遵循逻辑和理由,或将标准库称为“STL”。
希望这可以帮助。
关于c++ - std::string是STL的一部分吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5972546/