c++标准库——容器类

容器类可以分为两大类和容器适配器:

(1)序列容器(Sequence containers)


这种容器中的元素是有序的,每一个元素在容器中都有一个确切的位置,这个位置不依赖于元素的值,而是跟放入容器的时机有关。标准的序列容器有三个:vector, deque, list。另外你也可以把字符串(string)和数组(array)看成序列容器。

  Vectors
一个vector用动态数组来管理它的元素。像普通数组一样,通过对应的索引支持随机访问。从一个vector的尾部追加和删除元素是快速高效的,而从头部和中间进行这些操作效率就会低些,因为为了维护元素的序列索引必须多做一些移动元素的操作。

Deques

deque 表示双端队列——double-ended quene。deque同样用动态数组来管理它的元素,但和vector不同的是,deque可以同时向两个方向增长,所以在deque的头部和尾部添加元素都是快速高效的,而在中间插入元素则效率稍低,因为要移动元素。

Lists

list 使用双向链表来管理它的元素。这就表示list中的元素不能随机访问,所以在list中定位一个元素要比在vector和deque中费时好多。但有利有弊,相比较与vector和deque,在list插入和删除元素的效率在任何位置都是等效的,不需要移动其他的元素,只需要维护好指针连接即可,所以非常快速高效。

list因为不能随机访问元素,所以不支持[]操作符。


Strings

对于c++中的base_string<>, string, wstring字符串类,我们也可以视其为容器类,类似于vector,不同是它们的元素类型已经确定:char。


Arrays

c或者c++的静态数组原则上不能归类于STL容器,因为它们自己的成员函数,诸如:size(),empty()等等。然而STL的设计中却允许你针对这些普通静态数组使用STL算法。具体的使用请参看下面章节。


(2)关联容器(Associative containers)
这种容器是按值排序的,每一个元素的位置不依赖与放入容器的时机,而是根据其值而定。通常关联容器具体由二叉树(binary tree)来实现。
标准的关联容器类有四个:set, multiset, map, multimap。

Set
一个set容器中的元素是按照其自身的值排序的,而且一个值只允许出现一次。


Multisets

一个multiset容器除了允许出现相同值外,其它跟set容器一样。


Maps

一个map容器中的元素是一个key/value键值对,其中元素按照key来排序,而且不允许出现相同值得key。


Multimaps

一个multimap容器除了允许出现相同key值得元素之外,其它跟map容器一样。

所有这些关联容器类,它们缺省的排序规则是操作符<,同时你也可以通过模板参数自定义排序规则(比较函数或者函数对象)。


(3)容器适配器(Container Adapters)
除了基本的容器类外,c++标准库还提供了一些容器适配器类来满足一些特殊的需求。这些容器适配器类由基本的容器类实现。
Stacks

一个stack容器用LIFO(last-in-first-out)的策略来管理元素。


Queues

一个queue容器用FIFO(first-in-first-out)的策略来管理元素。


Priority Queues
一个priority queue容器用优先级的策略来管理元素。元素的优先级基于程序员指定的一个排序策略(缺省用操作符<)。通常容器中下一个元素就是优先级最高的元素,如果优先级最高的元素不止一个,那么它们的顺序没有定义。



你可能感兴趣的:(c++)