一、顺序性容器
顺序性容器用来维护一组有序、类型相同的元素。
主要是:vector和list。
1.vector
- vector是用一块连续的内存存放数据;
- vector进行随机访问,效率比较高(适合数列);
- vector对于插入和删除操作效率较低:这是由于vector内的每个元素都被存储在距离起始点固定的偏移位置,当进行插入操作时,如果插入的位置不是vector的尾端,那么就需要把插入位置右端的数据复制一份在右移;删除操作同理。
2.list
- list容器是双向链接(double-linked);
- 和vector的区别:并非用连续内存空间存储数据;
- list容器中每个元素包含三个部分:value、back(指向前一个元素)、front(指向下一个元素);
- 对list进行任意位置的插入和删除操作,效率较高。
3.deque
- deque容器和vector类似,都是以连续内存存储元素;
- deque容器和vector区别:deque可以进行最前端元素的插入和删除操作。
二、头文件
#include <vector>
#include <list>
#include <deque>
三、定义顺序性容器对象的方式
1.产生空的容器
list<string> slist;
vector<int> ivec;
2.产生特定大小的容器
每个元素都以其默认值作为初值。
(int 和double这类语言内置的算术类型,其默认值为0)
list<string> ilist(1024);
vector<int> svec(32);
3.定义特定大小的容器,并为每个元素指定初值
vector<int> ivec(10,-1);
list<string> slist(16,“unassigned”);
4.通过数组产生容器,并指定初值的元素的范围
int ia[8] = { 1,2,3,4,5,6,7,8 };
vector<int> fib(ia, ia + 8);
5.由某个容器产生出新容器
复制原容器内的元素,作为新容器的初值:
list<string> slist;//空容器
//填充slist...
list<string> slist2(slist);//将slist复制给slist2
四、容器末尾进行写入(插入)和弹出(删除)操作
- push_back()和pop_back();
- list和deque(不包括vector)还提供了push_front()和pop_front();
- 读取最前端和最末端的元素应该使用front()和back().
vec.push_back(1);//末端写入一个元素1
vec.pop_back();//删除最后一个元素
另:
每个容器除了拥有通用的插入函数insert(),还支持其四种变形;除拥有通用的删除函数erase(),还支持其两种变形。(略)