是 std::string 是 STL 的一部分
Is std::string part of the STL?
(当我说STL时,我指的是围绕容器,迭代器,算法和函子的模板库。
在认为std::string
大多表现得像普通容器,具有begin
和end
函数(包括迭代器)、size
函数以及将所有函数用于通过其迭代器在容器/范围上工作的普通 STL 算法的可能性(例如 transform
、sort
、find
等)。
然而,与此同时,它本身不是一个容器,因为它不适合存储任意数据的容器。此外,它主要通过成员函数(如substr
、find_first_of
等)对包含的数据进行操作,而真正的容器不会这样做,而是让算法来处理。
此外,cplusplus 参考站点和 C++ 标准不会std::string
与真正的容器一起列出,而是在不同的类别中列出。
然而,在SGI的STL网站上,basic_string
(以及因此string
typedef)与其他容器一起被提及,basic_string
参考站点声明它属于"容器"类别。
现在我的问题是,string
实际上是STL的一部分,还是它本身就是一个独立的库?
如果它现在属于 STL,它与 Stepanov 开发的原始 STL 有什么不同吗?
不,不是真的。是的,有点。
「STL」有不同的定义,包括:
-
实际的 HP/SGI STL,原始库,C++ 标准库基于其中的一部分。它们包括容器、迭代器和算法。字符串不是其中的一部分。
-
C++标准库中基于 SGI STL 库的部分:容器、迭代器和算法。仍然没有字符串。
-
所有C++标准库。这个定义绝对没有逻辑或现实的基础,但如果遵循,
std::string
将被包括在内。
请注意,实际的 STL 是在标准化C++(大约 13 年前,记住)之后开发的,他们已经向后采用了标准中的一些东西,比如字符串。这并不意味着他们最初在 1998 年就在那里......但是出于"兼容性"的原因,它们现在在那里。
总结
STL是容器,算法和迭代器。
98 C++采用了弦乐和流,现代SGI STL则向后采用了弦乐和流。
字符串是否是"STL 的一部分"取决于您是遵循逻辑和推理,还是将标准库称为"STL"。
希望这有帮助。
这个问题没有真正的答案。一方面,std::string
是完全独立于其他容器开发的。另一方面,它有足够的附加功能来满足随机访问容器的所有要求。你是否选择将其归类为"STL"的一部分完全取决于你 - 最后,它只是指出"STL"缺乏一个单一的,商定的定义,并且它突然获得明确含义的可能性很小(说得好听)。
IOW,"STL"是一个糟糕的缩写,因为人们用它来表示至少三种不同的东西 - 但是,不幸的是,也没有更好的缩写和更好的定义的含义,所以STL仍在使用,并且可能会无限期地继续这样做(并继续阻碍通信)。
它确实是STL的一部分。而std::string
只是basic_string<char>
类型定义。它是容器,专门用于具有字符串语义的数据存储(不是C++"专业化"的意思是:))。不过对斯捷潘诺夫一无所知。
值得一提的是,STL是"标准模板库",而不仅仅是容器的子部分。这包括算法、流和一些特征。
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- C++:如何使函数只返回作为列表一部分的字符串
- 为std::string的某个索引赋值
- std::sort()函数无法对向量的一部分进行排序
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 使用char类型将decimal转换为string,将string转换为decimal
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 将向量解析<string>为字符串
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 如何更改大小(std::string)
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 我可以在循环中引用 std::string 的一部分并将其放在外面吗?
- 是否可以在程序中使用 std::string 作为 if else 语句的一部分
- 多次擦除 std::string 的一部分
- 如何在不复制的情况下将 std::string 的一部分放入 streambuf 中
- 有一对<字符串,字符串>如何找到它是否是map<string,string>中的某个对的一部分?
- 是 std::string 是 STL 的一部分