1.简介
![](https://i-blog.csdnimg.cn/blog_migrate/67182bcbe54dc61446edc77967510775.png)
除了固定大小的array外,其他容器都提供高效、灵活的内存管理
- string 和 vector是连续内存,由下标访问非常快速,但是在中间删除和添加元素非常耗时,在一次插入或删除后,需要移动所有元素来保持连续存储
- list 和 forward_list是添加和删除非常快速,但是,不支持元素的随机访问,访问一个元素,只能遍历整个容器;相对额外内存开销也比较大
- deque 支持快速随机访问,在中间删除或插入代价较大,但是在两端添加或删除很快。
- 除非有更好的理由,否则使用vector更好
- 如果有很多小元素,且对额外开销有要求,则不要使用list和forward_list
1.头文件
#include <vector>
#include <list>
#include <deque>
#include <array>
#include <string>
#include <forward_list>
2.定义和初始化
![](https://i-blog.csdnimg.cn/blog_migrate/15acbabd6406e4b23d651f681a898939.png)
3.赋值运算
![](https://i-blog.csdnimg.cn/blog_migrate/30d9f6a2b48ab12083034ac167fb4995.png)
4.添加元素
![](https://i-blog.csdnimg.cn/blog_migrate/417ca14456e54f58772b17d34de7f75d.png)
5.访问元素
![](https://i-blog.csdnimg.cn/blog_migrate/0c5831a9d5d8bf31fb5f4c87b1d54ffc.png)
6.删除
![](https://i-blog.csdnimg.cn/blog_migrate/0610170361879974ba930ff6f563c82b.png)
7.改变容器大小
![](https://i-blog.csdnimg.cn/blog_migrate/e579540621b47ba298b76df1b59d9271.png)
8.所有容器适配器都支持的操作和类型
![](https://i-blog.csdnimg.cn/blog_migrate/332b632734e64a004b14aff32d6afd3f.png)
2.vector容器:
vector<int> a1;
vector<int> a2(3); //初始化3个元素,值为默认
vector<int> a3(3,5); //初始化3个元素,值都为5
vector<int> a4{1,2,3,4};
vector<int> a5 = {4,5,6};
vector<int> b1(a4);
vector<int> b2;
b2.assign(a4.begin(), a4.begin() + 2); //将a4的前2个值赋给b2
b2.swap(a5); //比直接拷贝快的多,b2为4,5,6
swap(b2, a4); //b2和a4互换,类型需一致
//返回a的最后一个元素
a.back();
//返回a的第一个元素
a.front();
//返回a的第i元素,当且仅当a存在
a[i];
//清空a中的元素
a.clear();
//判断a是否为空,空则返回true,非空则返回false
a.empty();
//删除a向量的最后一个元素
a.pop_back();
//删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束
a.erase(a.begin()+1,a.begin()+3);
//在a的最后一个向量后插入一个元素,其值为5
a.push_back(5);
//在a的第一个元素(从第0个算起)位置插入数值5,
a.insert(a.begin()+1,5);
//在a的第一个元素(从第0个算起)位置插入3个数,其值都为5
a.insert(a.begin()+1,3,5);
//b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6)
a.insert(a.begin()+1,b+3,b+6);
//返回a中元素的个数
a.size();
//返回a在内存中总共可以容纳的元素个数
a.capacity();
//将a的现有元素个数调整至10个,多则删,少则补,其值随机
a.resize(10);
//将a的现有元素个数调整至10个,多则删,少则补,其值为2
a.resize(10,2);
//将a的容量扩充至100,
a.reserve(100);