有人让我注意到这篇文章,声称STL术语被误用来指代整个c++标准库,而不是从SGI STL中提取的部分。
(...) it refers to the "STL", despite the fact that very few people still use the STL (which was designed at SGI).
Parts of the C++ Standard Library were based on parts of the STL, and it is these parts that many people (including several authors and the notoriously error-ridden cplusplus.com) still refer to as "the STL". However, this is inaccurate; indeed, the C++ standard never mentions "STL", and there are content differences between the two.
(...) "STL" is rarely used to refer to the bits of the stdlib that happen to be based on the SGI STL. People think it's the entire standard library. It gets put on CVs. And it is misleading.
我对c++的历史几乎一无所知,所以我无法判断这篇文章的正确性。我应该避免使用STL这个术语吗?或者这只是一个孤立的观点?
从GNU标准c++库(libstdc++)常见问题解答:
STL(标准模板库)是c++标准库的灵感来源,但是这些术语是不可互换的,它们的意思也不同。c++标准库包含了很多不是来自STL的东西,其中一些甚至不是模板,比如std::locale和std::thread。
libstdc++ -v3合并了大量来自SGI STL的代码(最终的合并来自发布版
3.3)。与原始SGI代码相比,libstdc++中的代码包含许多修复和更改。
特别是,string不是来自SGI,也没有使用它们的“rope”类(尽管这是作为可选扩展包含的),valarray和其他一些类也是如此。像vector<>这样的类来自SGI,但已被广泛修改。
关于libstdc++发展的更多信息,可以在API发展和向后兼容性文档中找到。
SGI的STL常见问题解答仍然是推荐阅读的。
仅供参考,截至2018年3月,甚至连STL官方网站www.sgi.com/tech/stl/都消失了。
术语“STL”或“标准模板库”在ISO 14882 c++标准中没有出现。因此,将c++标准库称为STL是错误的。术语“c++标准库”或“标准库”是ISO 14882正式使用的:
ISO 14882 c++标准:
17 -图书馆简介[lib.library]:
本子句描述了c++标准库的内容
一个格式良好的c++程序所使用的
图书馆里,又怎么一个规规矩矩的
实现可以提供
库中的实体。
...
STL是一个最初由Alexander Stepanov设计的库,独立于c++标准。然而,c++标准库的一些组件包括STL组件,如向量、列表和算法,如复制和交换。
当然,c++标准包含了STL之外的更多东西,所以术语“c++标准库”更正确(并且是标准文档实际使用的)。
从GNU标准c++库(libstdc++)常见问题解答:
STL(标准模板库)是c++标准库的灵感来源,但是这些术语是不可互换的,它们的意思也不同。c++标准库包含了很多不是来自STL的东西,其中一些甚至不是模板,比如std::locale和std::thread。
libstdc++ -v3合并了大量来自SGI STL的代码(最终的合并来自发布版
3.3)。与原始SGI代码相比,libstdc++中的代码包含许多修复和更改。
特别是,string不是来自SGI,也没有使用它们的“rope”类(尽管这是作为可选扩展包含的),valarray和其他一些类也是如此。像vector<>这样的类来自SGI,但已被广泛修改。
关于libstdc++发展的更多信息,可以在API发展和向后兼容性文档中找到。
SGI的STL常见问题解答仍然是推荐阅读的。
仅供参考,截至2018年3月,甚至连STL官方网站www.sgi.com/tech/stl/都消失了。
通俗地说:STL是标准库的一部分。
c++标准库分为:
标准函数库
i / O,
-字符串和字符处理,
数学,
时间,日期和本地化,
动态分配,
杂,
宽字符函数
标准OOP和泛型库
-标准c++ I/O类
-字符串类
-数字类
- STL容器类
- STL算法
- STL函数对象
- STL迭代器
- STL分配器
-本地化库
-异常处理类
-杂项支援图书馆
因此,如果你将STL作为标准库来讨论,这是可以的,只要记住STL实现允许泛型,而其他实现则更特定于一种类型。
请参考https://www.tutorialspoint.com/cplusplus/cpp_standard_library.htm