(当我说STL时,我是在谈论围绕容器,迭代器,算法和函子的模板库。)
这个问题是在想到std::string在大多数情况下都像普通容器一样出现时才想到的,它具有beginend函数(包括迭代器),一个size函数,并有可能将所有这些用于在容器中使用的普通STL算法/范围内的容器迭代器(例如transformsortfind等)。

但是,与此同时,它本身也不是容器,因为它不适合存储任意数据的容器的图片。此外,它主要通过成员函数(如substrfind_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",包括:

  • 实际的HP/SGI STL,原始库,C++标准库所基于的部分。它们包括容器,迭代器和算法。字符串不是其中的一部分。
  • C++标准库中基于SGI STL库的部分:容器,迭代器和算法。仍然没有字符串。
  • 所有C++标准库。但是,如果遵循此定义,则将包括std::string,绝对没有逻辑或现实基础。

  • 请注意,自C++标准化以来,实际的STL就已经开发出来了(大约13年前,请记住),并且它们向后采用了一些已纳入标准的内容,例如字符串。这并不意味着它们最初是在1998年出现的……但是出于“兼容性”的原因,它们现在已经存在。

    摘要

    STL是容器,算法和迭代器。

    字符串和流在C++ 98中采用,然后在现代SGI STL中采用后向采用。

    字符串是否为“STL的一部分”取决于您是否遵循逻辑和理由,或将标准库称为“STL”。

    希望这可以帮助。

    关于c++ - std::string是STL的一部分吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5972546/

    10-11 22:46
    查看更多