STL

STL

标准模板库(Standard Template LibrarySTL)STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。

STL的代码广义上分为algorithm算法,container容器,iterator迭代器;几乎所有代码采用模板类和模板函数的方式,提供了更好的代码重用。在C++标准中,STL被组织为下面的13个头文件:<algorithm><deque><functional><iterator><vector><list><map><memory><numeric><queue><set><stack><utility> 

iterator迭代器

迭代器是一种对象,它能够遍历STL容器中的部分或全部元素。每个迭代器对象代表容器中确定的地址。

它提供了一些基本操作符:*++==、!==,迭代器是个所谓的复杂指针,具有遍历复杂数据结构的能力

迭代器是一种检查容器内元素并遍历元素的数据类型

 

Java中的Iterator

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

Java中的Iterator功能比较简单,并且只能单向移动:

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iteratornext()方法时,它返回序列的第一个元素。

(2) 使用next()获得序列中的下一个元素。

(3) 使用hasNext()检查序列中是否还有元素。

(4) 使用remove()将迭代器新返回的元素删除。

IteratorJava迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

 

container容器

C++中容器就是一种用来存放数据的对象。其实就是容器类实例化之后的一个具体的对象,把这个对象看成一个容器,容器可以自行扩展(动态)

容器分为三类:

顺序容器:vector,deque,list

vector向量:连续存储的元素

list列表:由结点组成的双向链表

deque双端队列:连续存储的指向不同元素的指针所组成的数组

[deque是双端数组,而vector是单端的。

deque在接口上和vector非常相似,在许多操作的地方可以直接替换。

deque可以随机存取元素,索引值直接存取.

deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。]

关联容器:set,multiset,map,multimap

set集合:有节点组成的红黑树,每个节点都包含一个元素,节点之间以某种因素排列,没有两个不同的元素能够拥有相同的次序 <set>

multiset多重集合:允许存在两个次序相等的元素的集合 <set>

map映射:由{键,值}对组成的集合,键对上以某种因素排列 <map>

多重映射(multimap) 允许键对有相等的次序的映射 <map>

[map:它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。根据key值快速查找记录,查找的复杂度基本是Log(N)]

 

容器适配器:stack,queue

stack栈:后进先出的值的排列 <stack>

queue队列:先进先出的值的排列 <queue>

 

algorithm算法

STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个元素调用指定的函数stable_sort以你所指定的规则对序列进行稳定性排序等等。这样一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,就可以完成所需要的功能并大大地提升效率。

算法部分主要由头文件<algorithm><numeric><functional>组成。<algorithm>是所有STL头文件中最大的一个:

常用算法汇总

常用的查找算法:

adjacent_find()(adjacent 是邻近的意思)binary_search(),count(),count_if(),  find(), equal_range(),find_if()

常用的排序算法:

merge(),sort(),random_shuffle()shuffle是洗牌的意思) ,reverse()

常用的拷贝和替换算法:

copy(), replace(), replace_if(),swap()

常用的算术和生成算法:

accumulate()accumulate 是求和的意思),fill(),

常用的集合算法:

set_union(),set_intersection(), set_difference()

常用的遍历算法:

for_each(), transform()transform 是变换的意思)

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_39667655/article/details/80096601
STL
今日推荐