STL是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL是啥相关的知识,希望对你有一定的参考价值。

什么是STL呢?STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。

STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什麽。它被内建在你的编译器之内。因为STL的list是一个简单的容器,所以我打算从它开始介绍STL如何使用。如果你懂得了这个概念,其他的就都没有问题了。另外,list容器是相当简单的,我们会看到这一点。

在本文中我们将会看到如何定义和初始化一个list,计算它的元素的数量,从一个list里查找元素,删除元素,和一些其他的操作。要作到这些,我们将会讨论两个不同的算法,STL通用算法都是可以操作不止一个容器的,而list的成员函数是list容器专有的操作。

这是三类主要的STL组件的简明纲要。STL容器可以保存对象,内建对象和类对象。它们会安全的保存对象,并定义我们能够操作的这个对象的接口。放在蛋架上的鸡蛋不会滚到桌上。它们很安全。因此,在STL容器中的对象也很安全。我知道这个比喻听起来很老土,但是它很正确。

STL算法是标准算法,我们可以把它们应用在那些容器中的对象上。这些算法都有很著名的执行特性。它们可以给对象排序,删除它们,给它们记数,比较,找出特殊的对象,把它们合并到另一个容器中,以及执行其他有用的操作。
http://www.yesky.com/255/1910755.shtml

还有一种解释:
什么是STL?

STL代表科学和技术素养,但这个短语的背后隐藏的重要意义是对所有人而言。

STL也许可以简单地视为一个哲学观点,但决不仅仅如此。它包括了一套完整的教育方法,这个方法包含生活中的科学技术和不仅是学校师生的还有普通市民和政治家在内的所有人的思想。

为了达到普及科学技术的要求,科学技术的排它性和教师\科学家对科学教育的态度要根本转变。

课堂中的科学教育要从教师为主导、以教学大纲为核心的教育方式中解脱出来,代之以学生为中心来设计、指导和进行组织教学。为了使学生全身心投入学习动机是非常重要的而且这将只有在科学技术成为学生日常生活的需要时才能得到激发。

考虑到这些,我们现在是现代世界的一部分,这种意识比以前更为强烈,知识的获取与事实的记忆日益无关。一个微型移动电话能够直接接入因特网。这是能够在我们的指尖表达出一些事实信息。结果是学生在大量的事实学习(这是很快过时的知识)的思维负担是明显无意义的。

一旦这些负担被减轻了,全体学生亲自感受科学和技术的潜能就能被发掘出来。科学和技术不再被看作仅仅是’最聪明的’学生的宝贝。批判性思维得到解放。这些能揭示挑战不可靠信息和无确实根据的个人观点的思维方法,不管这些观点是来自’专家’,还是广告代理商或者政治家们。

现存的许多科学技术的排它性营造了道德和价值观来自于艺术和人文的氛围。实际上许多当前
参考技术A

STL是司太立合金的简称

司太立(Stellite)是一种能耐各种类型磨损和腐蚀以及高温氧化的硬质合金。即通常所说的钴基合金,司太立合金由美国人Elwood Hayness 于1907年发明。司太立合金是以钴作为主要成分,含有相当数量的镍、铬、钨和少量的钼、铌、钽、钛、镧等合金元素,偶而也还含有铁的一类合金。根据合金中成分不同,它们可以制成焊丝,粉末用于硬面堆焊,热喷涂、喷焊等工艺,也可以制成铸锻件和粉末冶金件。

司太立合金铸件适用于核电、石化、电力、电池、玻璃、轻工、食品等诸多领域。具有耐磨、耐蚀、抗氧化和耐高温特性。常用的产品有阀芯、阀座、轴类、轴套、泵类部件,玻璃、电池模具、喷嘴及切割刀具等。合金类别有:Co基合金铸件、Ni基合金铸件、Fe基合金铸件。司太立粉末冶金制品采用钴基、镍基或铁基合金雾化粉末,经压制、烧结、精加工制成。主要产品有阀杆、阀芯(球)、阀座、阀圈、密封环、木材锯齿、轴承泵、轴承球等。

参考技术B 它是由Alexander
Stepanov、Meng
Lee和David
R
Musser在惠普实验室工作时所开发
出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的
一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(
迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数
和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个
头文件:、、、、、、、、、、、和。以下笔者就简单
介绍一下STL各个部分的主要特点。
二、算法
大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用
。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯
定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择
,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多
的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为
少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。
STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个
元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样
一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算
法模板,就可以完成所需要的功能并大大地提升效率。
算法部分主要由头文件,和组成。是所
有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认
为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找
、遍历操作、复制、修改、移除、反转、排序、合并等等。体积很小,只包括
几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
中则定义了一些模板类,用以声明函数对象。
三、容器
在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性
,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。
经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写
的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。ST
L容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型
下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模
板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化

容器部分主要由头文件,,,,,和组成
。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下
表总结一下它们和相应头文件的对应关系。
数据结构
描述
实现头文件
向量(vector)
连续存储的元素
列表(list)
由节点组成的双向链表,每个结点包含着一个元素
双队列(deque)
连续存储的指向不同元素的指针所组成的数组
集合(set)
由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于
元素对的谓词排列,没有两个不同的元素能够拥有相同的次序
多重集合(multiset)
允许存在两个次序相等的元素的集合
栈(stack)
后进先出的值的排列
队列(queue)
先进先出的执的排列
优先队列(priority_queue)
元素的次序是由作用于所存储的值对上的某种谓词决定的的
一种队列
映射(map)
由键,值对组成的集合,以某种作用于键对上的谓词排列
多重映射(multimap)
允许键对有相等的次序的映射
四、迭代器
下面要说的迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些
(至少笔者是这样)。软件设计有一个基本原则,所有的问题都可以通过引进一个间接
层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将
算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器
存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器
中的元素。
迭代器部分主要由头文件,和组成。是一个很小
的头文件,它包括了贯穿使用在STL中的几个模板的声明,中提供了迭代器使
用的许多方法,而对于的描述则十分的困难,它以不同寻常的方式为容器中的
元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,中的
主要部分是模板类allocator,它负责产生所有容器中的默认分配器。
五、对初学者学习STL的一点建议
对于之前不太了解STL的读者来说,上面的文字只是十分概括地描述了一下STL的框架,
对您理解STL的机制乃至使用STL所起到的帮助微乎甚微,这不光是因为深入STL需要对C
++的高级应用有比较全面的了解,更因为STL的三个部分算法、容器和迭代器三部分是互
相牵制或者说是紧密结合的。从概念上讲最基础的部分是迭代器,可是直接学习迭代器
会遇到许多抽象枯燥和繁琐的细节,然而不真正理解迭代器又是无法直接进入另两部分
的学习的(至少对剖析源码来说是这样)。可以说,适应STL处理问题的方法是需要花费
一定的时间的,但是以此为代价,STL取得了一种十分可贵的独立性,它通过迭代器能在
尽可能少地知道某种数据结构的情况下完成对这一结构的运算,所以下决心钻研STL的朋
友们千万不要被一时的困难击倒。其实STL运用的模式相对统一,只要适应了它,从一个
STL工具到另一个工具,都不会有什么大的变化。
对于STL的使用,也普遍存在着两种观点。第一种认为STL的最大作用在于充当经典的数
据结构和算法教材,因为它的源代码涉及了许多具体实现方面的问题。第二种则认为ST
L的初衷乃是为了简化设计,避免重复劳动,提高编程效率,因此应该是“应用至上”的
,对于源代码则不必深究。笔者则认为分析源代码和应用并不矛盾,通过分析源代码也
能提高我们对其应用的理解,当然根据具体的目的也可以有不同的侧重。
参考技术C 机械里边是司太立特合金(Stellite)我看你的名字是机械,应该这个答案靠谱
司太立(Stellite)是一种能耐各种类型磨损和腐蚀以及高温氧化的硬质合金。即通常所说的钴基合金,司太立合金由美国人Elwood
Hayness
于1907年发明。司太立合金是以钴作为主要成分,含有相当数量的镍、铬、钨和少量的钼、铌、钽、钛、镧等合金元素,偶而也还含有铁的一类合金。根据合金中成分不同,它们可以制成焊丝,粉末用于硬面堆焊,热喷涂、喷焊等工艺,也可以制成铸锻件和粉末冶金件。
参考技术D 就是微软基础类库

以上是关于STL是啥的主要内容,如果未能解决你的问题,请参考以下文章

VS2005 的 STL 最佳实现是啥?

STL 中的双端队列到底是啥?

GCC 用于 STL 的默认分配器是啥?

创建 STL - 身份映射的最简单方法是啥?

使用 STL 容器进行中位数计算时,正确的方法是啥?

STL 中 boost::upgrade_to_unique_lock 的等价物是啥?