一.vector
使用时需要包含头文件:
#include<vector>;
1.初始化
vector<int> vec(16); //定义了已知长度16的vector
vector<int> vec(64,2); //定义了初值为2长度64的vector
vector<int> vec(a); //用a向量来创建向量
vector<int> vec(a.begin()+i,a.begin()+j); //定义了值为a中第i个到第j个元素
vector<vector<int>> array(i.vector<int>(j,0));//相当于定义了初始值为0的一个二维数组array[i][j];
vector<vector<int>> array;//相当于定义了的一个二维数组array[i][j];
array.resize(i, vector<int>(j));
2.成员函数的用法
vector<int> v;
v.push_back(elem);//在尾部加入一个数据elem。
v.pop_back();//去掉数组的最后一个数据。
v.size();//返回容器中实际数据的个数。
v.empty();//判断容器是否为空。
v.begin();//返回指向容器第一个元素的迭代器。
v.end();//返回指向容器最后一个元素的迭代器。
v.erase(v.begin()+i,v.begin()+j);//删除v中第i个(从第0个算起)到第j个元素。
v.insert(v.begin()+i,elem);//在第i个元素(从第0个算起)的位置插入数值elem。
3.特点
- vector是数组的一种类表示
- 在尾部添加元素是固定时间,在头部或中间添加或删除元素是线性时间.
- vector是可反转容器
- 优点:自动管理内存、动态改变长度并随着元素的增减而增大或缩小
二.stack
使用时需要包含头文件:
#include<stack>;
1.成员函数的用法
stack<int> s;
s.empty(); //堆栈为空则返回真。
s.pop(); //移除栈顶元素。
s.push(elem); //在栈顶增加元素elem。
s.size(); //返回栈中元素数目。
s.top(); //返回栈顶元素。
2.特点
- 不允许随机访问栈元素
- 不允许遍历栈,把使用限制在定义栈的基本操作上
三.queue
使用时需要包含头文件:
#include<queue>;
1.成员函数的用法
queue<int> q;
q.push(elem); //入队,将elem接到队列的末端。
q.pop(); //出队,弹出队列的第一个元素。
q.front();//访问队首元素。
q.back();//访问队尾元素。
q.empty();//判断队列空。
q.size();//访问队列中的元素个数。
2.优先级队列
priority_queue <int,vector<int>,greater<int> > q;//升序队列
priority_queue <int,vector<int>,less<int> >q;//降序队列
/*自定义类型*/
priority_queue<int, vector<int>, cmp> q;
struct cmp {
operator bool ()(int x, int y)
{
return x > y;
}
};
/*结构体声明方式*/
struct node {
int x, y;
friend bool operator < (node a, node b)
{
return a.x > b.x;
}
};
priority_queue<node>q;
3.特点
- 不允许随机访问队列元素
- 不允许遍历队列,可以进行队列基本操作
四.list
使用时需要包含头文件:
#include<list>;
1.初始化
list<int>lst; //创建空list
list<int>lst(10); //创建含有10个元素的list
list<int>lst(10,6); //创建含有10个元素6的list
list<int>lst(lst0);//使用lst0(另一个list)初始化lst
list<int>lst(lst0.begin(),lst0.end());//使用lst0(另一个list)初始化lst
2.成员函数的用法
list<int> lst;
lst.pop_back();//删除最后一个元素。
lst.pop_front();//删除第一个元素。
lst.push_back(elem);//在list的末尾添加一个元素。
lst.push_front(elem);//在list的头部添加一个元素。
lst.clear();//删除所有元素。
lst.empty();//如果list是空的则返回true。
lst.back();//返回最后一个元素。
lst.begin();//返回指向第一个元素的迭代器。
/*--------------------遍历--------------------*/
list<int>::iterator it;
for(it= lst.begin(); it!=lst.end(); ++it)
cout << *it << " ";
3.特点
- list为可反转容器
- list不支持数组表示法和随机访问
- list强调的是元素的快速插入与删除
五.deque
使用时需要包含头文件:
#include<deque>;
1.初始化
deque<int>deq;//创建一个空的deque
deque<int>deq(10);//创建含有10个元素的deque
deque<int>deq(10, 6);//创建含有10个元素6的deque
deque<int>deq(deq0);//使用deq0(另一个deque)初始化deq
2.成员函数的用法
deque<int> deq;
deq.front();//返回第一个元素的引用。
deq.back();//返回最后一个元素的引用。
deq.push_front(elem);//把元素elem插入到双向队列的头部。
deq.pop_front();//弹出双向队列的第一个元素。
deq.push_back(elem);//把元素elem插入到双向队列的尾部。
deq.pop_back();//弹出双向队列的最后一个元素。
3.特点
- deque起始位置插入删除元素时间是固定的
- 支持随机访问
- 在序列中部执行插入删除操作时,vector更快一些