序列型容器概览
1.vector
定义在头文件<vector>
实际上是一个动态数组 随机存取任何元素都能在常数时间完成。在尾端增删元素具有较佳的性能。
2.deque(双端队列)
定义于<deque>
也是个动态数组,随机存取任何元素都能在常数时间完成(但性能次于vector)。在两端增删元素具有较佳的性能。
3.list(双向链表)
任意位置插入和删除元素的效率都很高
不支持随机存取
每个元素还有指针占用额外空间
PS:在序列容器中,元素的插入位置同元素的值无关
基本操作
1.初始化
默认构造函数初始化
vector<int> vec;
list<string> list1;
deque<float> deq;
拷贝构造函数初始化
vector vec1;
vector vec2(vec1);
list list1;
list list2(list1);
deque deq1;
deque deq2(deq1);
创建有长度为10的容器
vector<string> vec(10);
list<int> list1(10);
deque<string> deq(10);
创建有10个初值的容器
vector<string> vec(10,"hi");
list<int> list1(10, 1);
deque<string> deq(10, "hi");
2.访问元素
c.back()
返回容器c的最后一个元素的引用
c.front()
返回容器c的第一个元素的引用
c[n]
返回下标为n的元素的引用(0<=n<c.size()),只适用于vector和deque容器
c.at[n]
返回下标为n的元素的引用(0<=n<c.size()),只适用于vector和deque容器
3.添加元素
c.push_back(t)
在容器c的尾部添加值为t的元素。返回void类型
c.push_front(t)
在容器c的前端添加值为t的元素。返回void类型,只适用于list和deque
c.insert(p,t)
在迭代器p所指向的元素前面插入元素t。返回指向新添加元素的迭代器
c.insert(p,n,t)
在迭代器p所指向的元素前面插入n个值为t的新元素,返回void类型
c.insert(p,b,e)
在迭代器p所指向的元素前面插入迭代器b和e标记的范围内的元素。返回void类型
4.删除元素
c.pop_back()
删除容器c的最后一个元素
c.pop_front()
删除容器c的第一个元素,只适用于deque和list容器
c.erase(p)
删除迭代器p指向的容器中的元素
c.erase(b,e)
删除迭代器b和e所标记范围内的元素(前闭后开区间)
c.clear()
删除容器中所有的元素
选用规则
- 如果程序要求随机访问元素,则应用vector或者 deque容器
- 如果程序必须在容器中间位置插入或删除元素,则应采用list容器
- 如果程序不是在容器的中间位置,而是在容器的首部或尾部插入或删除元素,则应采用deque容器