一、deque
1.简介
- deque是“double-ended queue”的缩写,和vector一样都是STL的容器,deque是双端的,而vector是单端的。
- deque在接口上和vector非常相似,在许多操作的地方可以直接替换。
- deque可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲)。
- deque头部和尾部添加或移除元素都非常快速。但是在中部安插元素或移除元素比较费时。
使用前准备:
#include <deque> using namespace std;
2.deque对象的构造函数
默认构造:
deque采用模板类实现,deque对象的默认构造形式:deque<T> deqT;
带参数构造:
deque(beg,end); //构造函数将[beg, end)区间中的元素拷贝给本身。注意该区间是左闭右开的区间。
deque(n,elem); //构造函数将n个elem拷贝给本身。
deque(const deque &deq); //拷贝构造函数。
3.deque末尾的添加移除操作
deque.push_back(elem); //在容器尾部添加一个数据
deque.push_front(elem); //在容器头部插入一个数据
deque.pop_back(); //删除容器最后一个数据
deque.pop_front(); //删除容器第一个数据
4.deque的数据存取
deque.at(idx); //返回索引idx所指的数据,如果idx越界,抛出out_of_range。
deque[idx]; //返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
deque.front(); //返回第一个数据。
deque.back(); //返回最后一个数据。
5.deque与迭代器
deque.begin(); //返回容器中第一个元素的迭代器。
deque.end(); //返回容器中最后一个元素之后的迭代器。
deque.rbegin(); //返回容器中倒数第一个元素的迭代器。
deque.rend(); //返回容器中倒数最后一个元素之后的迭代器。
6.deque的赋值
deque.assign(beg,end); //将[beg, end)区间中的数据拷贝赋值给本身。注意该区间是左闭右开的区间。
deque.assign(n,elem); //将n个elem拷贝赋值给本身。
deque& operator=(const deque &deq); //重载等号操作符
deque.swap(deq); // 将vec与本身的元素互换。
1 #include <deque> 2 3 using namespace std; 4 5 void main() 6 { 7 deque<int> deqIntA,deqIntB,deqIntC,deqIntD; 8 9 deqIntA.push_back(1); 10 deqIntA.push_back(3); 11 deqIntA.push_back(5); 12 deqIntA.push_back(7); 13 deqIntA.push_back(9); 14 15 deqIntB.assign(deqIntA.begin(),deqIntA.end()); // 1 3 5 7 9 16 deqIntC.assign(5,8); //8 8 8 8 8 17 deqIntD = deqIntA; //1 3 5 7 9 18 deqIntC.swap(deqIntD); //互换 19 }
7.deque的大小
deque.size(); //返回容器中元素的个数
deque.empty(); //判断容器是否为空
deque.resize(num); //重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
8.deque的插入
9.deque的删除
deque.clear(); //移除容器的所有数据
deque.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
deque.erase(pos); //删除pos位置的数据,返回下一个数据的位置。
二、queue
1.简介
- queue是队列容器,是一种“先进先出”的容器。
- queue是简单地装饰deque容器而成为另外的一种容器。
使用前准备:
#include <queue> using namespace std;
2.queue的操作
默认构造
queue采用模板类实现,queue对象的默认构造形式:queue<T> queT;
queue<int> queInt; //一个存放int的queue容器。
queue<float> queFloat; //一个存放float的queue容器。
queue<string> queString; //一个存放string的queue容器。
...
push与pop操作
- queue.push(elem); //往队尾添加元素
- queue.pop(); //从队头移除第一个元素
拷贝构造与赋值
- queue(const queue &que); //拷贝构造函数
- queue& operator=(const queue &que); //重载等号操作符
queue<int> queIntA, queIntC;
…
queue<int> queIntB(queIntA);
queue<int> queIntD;
queIntD = queIntC;
数据存取
- queue.back(); //返回最后一个元素
- queue.front(); //返回第一个元素
queue的大小
- queue.empty(); //判断队列是否为空
- queue.size(); //返回队列的大小
三、stack
1.简介
- stack是堆栈容器,是一种“先进后出”的容器。
- stack是简单地装饰deque容器而成为另外的一种容器。
使用前准备:
#include <stack> using namespace std;
2.相关操作
stack对象的默认构造
stack采用模板类实现, stack对象的默认构造形式: stack <T> stkT; 如:
stack <int> stkInt; //一个存放int的stack容器。
stack <float> stkFloat; //一个存放float的stack容器。
stack <string> stkString; //一个存放string的stack容器。
...
//尖括号内还可以设置指针类型或自定义类型。
stack的push与pop操作
- stack.push(elem); //往栈头添加元素
- stack.pop(); //从栈头移除第一个元素
例如:stack<int> stkInt;
stkInt.push(1);stkInt.push(3);stkInt.pop();
stkInt.push(5);stkInt.push(7);
stkInt.push(9);stkInt.pop();
stkInt.pop();
此时stkInt存放的元素是1,5
stack对象的拷贝构造与赋值
- stack(const stack &stk); //拷贝构造函数
- stack& operator=(const stack &stk); //重载等号操作符
如:
stack<int> stkIntA, stkIntC;
…
stack<int> stkIntB(stkIntA);
stack<int> stkIntD;
stkIntD = stkIntC;
stack的数据存取
stack.top(); //返回最后一个压入栈元素
stack的大小
- stack.empty(); //判断堆栈是否为空
- stack.size(); //返回堆栈的大小
四、list的简介
- list是一个双向链表容器,可高效地进行插入删除元素。
- list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。
使用前的准备:
1 #include <list> 2 using namespace std;
相关操作参考其他容器