Xeo*_*Xeo 36 c++ string history stl
(当我说STL时,我说的是围绕容器,迭代器,算法和仿函数的模板库.)
在认为std::string大多数行为像普通容器,带有begin和end函数(包括迭代器)之后,我想到了这个问题.一个size通过它们的迭代(例如,功能,并使用所有这些对于在容器上的工作正常STL算法的可能性/范围transform,sort,find等等).
然而,与此同时,它本身并不是容器,因为它不适合存储任意数据的容器.此外,它包含的数据操作主要是通过成员函数一样substr,find_first_of等等,而真正的容器不这样做,让算法处理的.
此外,cplusplus参考站点和C++标准不会std::string与真实容器一起列出,而是列在一个不同的类别中.
但是,在SGI的STL站点上,basic_string(并因此stringtypedef)与另一个容器一起提及,并且basic_string引用站点声明它属于"容器"类别.
现在我的问题是,string实际上是STL的一部分还是它本身就是一个独特的库?
如果它现在属于STL,它在Stepanov开发的原始STL中是否有所不同?
Lig*_*ica 28
不,不是真的.是的,有点儿.
"STL"有不同的定义,包括:
实际的HP/SGI STL,原始库,C++标准库所基于的部分.它们包括容器,迭代器和算法.字符串不是其中的一部分.
C++标准库中基于SGI STL库的部分:容器,迭代器和算法.仍然没有字符串.
所有的C++标准库.这个定义绝对没有逻辑或现实的基础,但如果遵循,std::string将包括在内.
请注意,实际的STL已经开发了,因为C++是标准化的(大约13年前,请记住),并且它们已经向后采用了标准中的一些内容,比如字符串.但这并不意味着他们原本有1998年......但他们没有现在的"兼容"的原因.
摘要
STL是容器,算法和迭代器.
C++ 98采用字符串和流,然后向后采用现代SGI STL.
字符串是否是"STL的一部分"取决于您是否遵循逻辑和原因,或者调用标准库"STL".
希望这可以帮助.
Jer*_*fin 10
对此没有真正的答案.一方面,std::string完全独立于其他容器开发.另一方面,它已经足够了,以满足随机访问容器的所有要求.你是否选择将其归类为"STL"的一部分完全取决于你 - 最后,它只是指出"STL"缺乏单一的,一致同意的定义,以及它突然出现的可能性获得一个明确的意义是遥远的(说得好).
IOW,"STL"是一个糟糕的缩写,因为人们用它来表示至少三种不同的东西 - 但不幸的是,没有更好的缩写,也有更好的定义,所以STL仍在使用中,可能会继续使用这样做(并继续阻碍沟通)无限期地.