gpt4 book ai didi

c++ - std::string 是 STL 的一部分吗?

转载 作者:IT老高 更新时间:2023-10-28 12:32:26 26 4
gpt4 key购买 nike

(当我说 STL 时,我指的是围绕容器、迭代器、算法和仿函数的模板库。)
这个问题是在认为 std::string 主要表现得像一个普通容器,具有 beginend 函数(包括迭代器) ,一个 size 函数,并且可以将所有这些用于通过其迭代器在容器/范围上工作的普通 STL 算法(例如 transformsort查找等)。

但同时,它本身并不是一个容器,因为它不适合存储任意数据的容器。此外,它主要通过成员函数对包含的数据进行操作,如 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++ 标准库所基于的部分。它们包括容器、迭代器和算法。字符串不是其中的一部分。

  • 基于 SGI STL 库的 C++ 标准库部分:容器、迭代器和算法。仍然没有字符串。

  • 所有 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com