1
9
C++标准库中没有任何内容 “属于” 到STL。STL是一个不同的库 影响 C++标准库中的许多部分。从标记wiki:
然而,许多人将C++标准库称为标准模板库,这并不完全正确。我猜如果你不被允许使用STL,那实际上意味着你不被许可使用C++标准库。但你必须让他们知道他们真正的意思。 有关详细信息,请参阅 What's the difference between "STL" and "C++ Standard Library"? |
2
3
在我看来
从历史上看,STL是核心(包括容器、算法和迭代器等),而标准库则是一个围绕核心构建的完整操作系统,提供所有其他功能。标准库在STL的基础上进行了修改,但该部分标准库的根在STL中。(还记得GNU的人是多么努力地提醒我们Linux只是一个内核,并坚持称OS为GNU/Linux吗?)
如果标准委员会正在写一篇论文而不是c++标准,他们可能需要承认
如 this answer ,Bjarne Stroustrup,C++的发明人, described STL 像
此外,引入标准库的STL的一个核心特性是 每一个 STL算法必须预先指定 最坏情况 算法的复杂性,使STL的实现变得无关紧要。人们只需注意STL容器或算法的规范,该容器或算法历史上托管在SGI网站以及其他来源上。这在史前时代是相当重要的,当时每个人都可以用不同的计算复杂度设计自己的容器。
标准库中引入的其他重要STL特性包括当前所体现的函数式编程的新范式
从这个意义上说,回到你的问题,我认为这是公平的说,集装箱像
|
3
2
在90年代早期,C++中没有集合库。人们要么使用RogueWave、Booch组件,要么其他我忘记名字的东西。这就是为什么你会在QT中看到像QList这样的类,因为他们需要一些东西。 当时,SGI有一个收藏库,许多标准委员会成员都看到了,并且非常喜欢。他们基于许多人请求的集合库,并将其称为STL。 到今天为止,我会说用户已经明确实例化的库组件是STL的一部分。为了澄清,您作为std::vector的用户必须指定它包含的内容,即std::vector(1) 这意味着它是STL的一部分。OTOH您不必实例化fstream,即使它是basic_stream之类的typedef。 至于效率,STL是非常精简和吝啬的,这要归功于专业化和TMP等方面的专家。我能写些更符合我目的的东西吗。我可以花一个月的时间写一些比我的需要好1%的东西,但它值得吗? 顺便说一句,除了OS调用和C调用之外,整个C++库都是模板化的,尽管(比如fstream)你可能永远不会看到它。所以他们禁止大部分C++库。 (1) 顺便说一下,我认为STL方法是最好的方法。其他集合要求您执行从基类Collectionable派生之类的操作。 |
4
0
谢谢你对我问题的所有回复。我对这个问题的一些理解: 1.当您需要在没有STL或任何其他模板库的情况下进行开发时,只能使用、、等库,,。您只能在程序中使用指针、字符串(可能只有字符)和类,这意味着您需要定义自己的数据结构。 2.不使用STL的目的是测试您对基本c++操作(如new/delete、指针和类)的理解。我想的另一个目的是节省内存。 我在一次面试中遇到了这个问题。我希望如果你面临我以前面临的同样的情况,这会对你有所帮助。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |