上一篇文章cpp的STL之vector介绍了cpp里的vector
包。
除了vector
容器之外,cpp的序列容器还有deque
和list
,这里主要介绍他们的区别。
deque双端队列
不同于vector
容器,deque
支持双向存取。
因此,deque
容器多了push_front
和pop_front
两个函数,分别表示在队列的头部插入一个数据和删除一个数据
deque<int> deq; //定义双端队列
deq.push_front(0); //在队列的头部插入一个数据0
deq.pop_front(); //在队列的头部删除一个数据
其次,deque
容器不允许容量查询,即不能使用capacity()
函数
list链表
vector
容器由于内存是连续的,因此频繁的增加、删除数据时会导致速度非常慢。
如果分配的连续内存不够的话,新增一个元素,操作系统需要重新分配内存,然后拷贝复制之前的数据到新分配的内存里。
为了解决这种需要频繁增加、删除数据的场景,链表list
应运而生。
链表list
和vector
容器的存储方式非常不一样。
链表list
每个结点有三个结构:前向指针、具体数据和后向指针,前向指针和后向指针分别指向上一个数据和下一个数据的地址。
这种结构表示list
容器不需要连续的内存,因此新增或者删除数据只需要修改对应节点前向指针、后向指针就可以了。
同样的,这种双链表的结构也导致了list
容器随机访问效率不如vector
容器。
vector
容器取第n个数据,只需要使用vec[n]
数据就可以取到,而list
不支持改方法