序列式容器:vecor,stack,queue用法

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 > istack;//便是以list为底部结构的stack


6.queue

是一种先进先出的数据结构,他有两个出口,只能最底端可以加入,最顶端可以取出。不允许有遍历行为。缺省情况下以deque为底部结构,并封闭了底部的出口和前端的开口。不提供遍历功能,不提供迭代器。

empty():

size():

front():取出前端的元素

back():取出末端元素

push():从末端添加元素

pop():删除前端元素

 也可以以list作为底端结构。

queue > iqueue;


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





你可能感兴趣的:(STL)