STL 入门学习笔记二

来源:互联网 发布:excel表格不能合计数据 编辑:程序博客网 时间:2024/04/26 23:50

继续之前的个面试问题,为什么选择list,这要求对不同容器的特性有些了解,下面列出来

关联式容器

2.1 map

2.5 set

顺序容器

2.2vector

2.3deque

2.4 list

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 容器(Containers)    容器类别(简称容器)用来管理一组元素

1. 序列式容器 Sequence containers,此乃可序(ordered)群集,其中每个元素均
有固定位置 — 取决于插入时机和地点,和元素值无关。如果你以尾附方式对
一个群集置入六个元素,它们的排列次序将和置入次序一致。STL 提供三个定
义好的序列式容器:vector, deque, list。


2. 关系型容器 Associative containers,此乃已序(sorted)群集,元素位置取决于
特定的排序准则。如果你将六个元素置入这样的群集中,它们的位置取决于元
素值,和插入次序无关。STL 提供了㆕个关系型容器:set, multiset, map,
multimap。用来管理一组元素。


迭代器(Iterators)
迭代器是一个「可巡访 STL 容器内全部或部分元素」的对象。一个迭代器用来指出容器中的一个特定位置。

所有容器类别都提供有一些成员函数,使我们得以获得迭代器并以之遍访所有元
素。这些函数中最重要的是:
 begin()
传回一个迭代器,指向容器起始点,也就是第一元素(如果有的话)的位置。
 end()
传回一个迭代器,指向容器结束点。结束点在最后一个元素之后,这样的迭代器又称作「逾尾(past-the-end)」迭代器。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

简单比较vector 可以当成数组使用(单向),deque是双向变长数组,STL中的list是doubly linked list链表、可以快速的插入和删除,与前面的不同其实也就是顺序存储和链式储存的不同。

set和map是关系型容器。所有标准关系型容器, 通常以平衡二元树完成。

因此你可以把 set 和 multisets 分别视为特殊的 map 和 multimaps,只不过 sets 元素
的 value 和 key 是指同一物件。因此 map 和 multimaps 拥有 set 和 multisets 的所有
能力和所有操作函数

事实上 sets 和 multisets 通常以红黑树(red-black tree)实作而成。红黑树在改变元
素数量和元素搜寻方面都很出色,它保证节点安插时最多只会作两个重新链结(relink)
动作,而且到达某一元素的最长路径深度,最多只是最短路径深度的两倍。




原创粉丝点击