STL 容器

标准库为相关对象的存储集合提供了各种类型安全容器。容器是类模板;在声明容器变量时,你可以指定该容器将保存的元素类型。可以使用初始值设定项列表构造容器。它们具有用于添加和移除元素以及执行其他操作的成员函数。
可使用迭代器循环访问容器中的元素以及访问单个元素。可以通过使用其成员函数和运算符以及全局函数来显式使用迭代器。还可以隐式使用它们,例如通过使用范围 for 循环。所有 STL 容器的迭代器都有一个通用接口,但是每个容器会定义自己的专用迭代器。


容器可以分为三个类别:序列容器、关联容器和容器适配器。

 

序列容器
序列容器维护你指定的插入元素的顺序。
vector 容器的行为类似于数组,但可以根据要求自动增长。它可以随机访问、连续存储,长度也非常灵活。基于上述和其他原因,vector 是多数应用程序的首选序列容器。
array 容器具备 vector 的某些优点,但长度不够灵活。
deque(双端队列)容器支持在容器的起点和终点进行快速插入和删除。它享有 vector 随机访问和长度灵活的优点,但是不具备连续性。
list容器是双向链表,在容器内的任意位置启用了双向访问、快速插入和快速删除,但是你不能随机访问此容器中的元素。
forward_list 容器是单独链表,list 的向前访问版本。


关联容器
在关联容器中,按照预定义的顺序插入元素,例如按升序排序。无序的关联容器也可用。关联容器可分为两个子集:映射和组集。
map,有时称为字典,包含键/值对。键用于对序列排序,值与该键关联。例如,map可能包含许多键(代表文本中每个独特的单词)和相应的值(代表每个单词在文本中出现的次数)。 map的无序版本是 unordered_map。
set仅是按升序排列每个元素的容器,值也是键。 set的无序版本是 unordered_set。
map 和 set 都仅允许将键或元素的一个实例插入容器中。如果需要元素的多个实例,请使用multimap或multiset。无序版本是 unordered_multimap 和 unordered_multiset。

 

容器适配器
容器适配器是序列容器或关联容器的变体,为了简单明确起见,它对接口进行限制。容器适配器不支持迭代器。
queue容器遵循 FIFO(先进先出)语义。第一个推送(即插入队列中)的元素将第一个弹出(即从队列中移除)。
priority_queue容器也是如此组织,因此具有最高值的元素始终排在队列的第一位。
stack容器遵循 LIFO(后进先出)语义。堆栈上最后推送的元素将第一个弹出。
由于容器适配器不支持迭代器,因此无法与 STL 算法一起使用。

 

posted @ 2016-07-06 21:14  _in_the_way  阅读(177)  评论(0编辑  收藏  举报