1.序列式容器
c++本身提供了一种序列式容器array,STL提供了vector,list,deque,stack,queue,priority-queue。
2.vector概述
与array相似,array是静态空间,一旦配置了就不能改变,而vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素,它是一个连续线性空间。
支持的操作:
size():元素个数
capacity():实际配置的大小
empty():是否为空
operator[]:随机存取
front():取出第一个元素
back():取出最后一个元素
push_back():将元素插入至最尾端
pop_back():将最尾端元素取出并消除
erase():消除某个位置上的元素
resize():重置大小有两种形式
void resize(size_type new_size,const & x);值全部为x
void resize(size_type new_size);
clear():清除所有的元素
3.list
每次插入和删除一个元素就配置或释放一个元素空间。,它是一个双向链表,提供的是双向迭代器,在尾端加入一个空白节点,成为环状双向链表。
push_front():插入一个节点,作为头节点
push_back():插入一个节点,作为尾节点
erase(iterator position):移除迭代器position所指节点
pop_front():移除头节点
pop_back():移除尾节点
clear():清除所有节点
remove(const T& value):将数值为value之所有元素移除
unique():移除元素相同的连续元素
4.deque
vector是单向开口的连续线性空间,deque是一种双向开口的连续线性空间,可以从头尾分别作元素的插入和删除操作。与vector区别,deque允许以常数时间对头端进行元素的插入和移除,deque没有所谓容量的观念,它是由一段一段的定量连续空间,串接在整个queue的头端和尾端。具有复杂的迭代器结构。
5.stack
是一种先进先出的数据结构,他只有一个出口,只能在最顶端进行元素操作,不允许有遍历行为。以某种既有容器作为底部结构,将其接口改变,使之符合“先进先出”的特性。若以deque为底部结构并封闭其头端开口,便得到了一个stack。stack不提供迭代器。
缺省状况下是以queue()为底部结构
empty():
size():
top():返回顶端元素
push():从顶端添加元素
pop():删除顶端元素
list也是双向开口的数据结构,以list为底部结构并封闭其头端开口,也可以形成一个stack。
stack
6.queue
是一种先进先出的数据结构,他有两个出口,只能最底端可以加入,最顶端可以取出。不允许有遍历行为。缺省情况下以deque为底部结构,并封闭了底部的出口和前端的开口。不提供遍历功能,不提供迭代器。
empty():
size():
front():取出前端的元素
back():取出末端元素
push():从末端添加元素
pop():删除前端元素
也可以以list作为底端结构。
queue
7.heap
不是ST容器组件,扮演priority queue的助手。二叉堆作为底层机制,二叉堆就是一个完全二叉树,整个树没有节点漏洞,我们可以利用array来存储所有节点。将#0保留,这样,若某个节点位于i,则左子节点位于2i,右子节点位于2i+1,其父节点位于i/2处。
heap分为max-heap和min-heap,STL提供的是max-heap。heap不提供遍历功能,也不提供迭代器。
push_heap(iterator first,iterator last):
pop_heap(iterator first,iterator last):
sort_heap():
make_heap():将一段现有的数据转化为一个heap。
8.priority_queue
是一个拥有权值观念的queue,允许以任何顺序将任何元素推入元素内,但取出时是从优先权最高的元素开始取。但它还是一个queue,只允许在底端加入元素,在顶端取出元素。缺省情况下是以vector为底部容器。只有queue顶端的元素(权值最高者),才有机会被外界取用。不提供遍历功能,也不提供diea