deque简介
deque是“double-ended queue"的缩写。deque是双端的,而vector是单端的。deque在接口上和vector非常相似,许多操作可以直接替换。
deque可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法)
deque头部和尾部添加或移除元素都非常快,但是在中部安插元素或移除元素都比较费时。
deque使用前准备
#include <deque>
using namespace std;
deque对象的默认构造形式:
deque<T> deqT;
如:
deque<int>deqInt;//一个存放int的deque容器
deque<float>deqFloat;//一个存放float的deque容器
deque末尾的添加移除操作:
deque.push_back(elem);//在容器尾部添加一个数据
deque.push_front(elem);//在容器头部插入一个数据
deque.pop_back();//删除容器最后一个数据
deque.pop_front();删除容器第一个数据
deque的数据存取
deque可以用deque.at(idx)或deque[idx]进行数据存取,二者差异与vector类似
deque.front();//返回第一个数据
deque.front();//返回最后一个数据
deque与迭代器:(和vector一样,见vector)
deque.begin();//返回容器中第一个元素
deque.end();//返回容器最后一个元素之后的迭代器
deque.rbegin();//返回容器中倒数第一个元素的迭代器
deque.rend();//返回容器中倒数最后一个元素之后的迭代器
deque对象的带参数构造(与vector完全类似)
deque(beg,end);//将[beg,end)区间的元素赋给deque
deque(n,elem);//将n个值为elem的元素赋值给deque
deque(const deque &deq);//将deq赋值给当前的deque
deque的赋值(见vector中assign用法)
deque.assign(beg,end);//将[beg,end)区间中的数据拷贝赋值给本身
deque.assign(n,elem);将n个elem拷贝赋值给本身
deque & operator=(const deque &deq);//重载等号操作符
deque.swap(deq);//将deq与本身的元素互换
deque的大小:
deque.size();//返回容器中元素的个数
deque.empty();//判断是否为空
deque.resize(num);//重新指定容器的长度为num,容器变长,则以elem值填充新位置,若容器变短,则末尾超出容器长度的元素被删除。
deque.resize(num,elem);重新指定容器的长度为num,若容器变长,则以elem值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque的插入(与vector类似):
deque.insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。
deque.insert(pos,n,elem);在pos位置插入n个elem数据,无返回值。
deque.insert(pos,beg,end);在pos位置插入[beg,end)区间的数据,无返回值。
删除:(与vector类似)
deque.clear();
deque.erase(beg,end);
deque.erase(pos);
queue,stack是对deque的限制的容器
queue是队列容器,是一种”先进先出”的容器。queue是简单地装饰deque容器而成为另外的一种容器。
queue使用:
使用:
#include <queue>
using namespace std;
构造函数和vector,deque完全类似
queue的push与pop操作:
queue.push(elem);往队尾添加元素
queue.pop();//从对头移除第一个元素
queue对象的拷贝构造与赋值:
queue(const queue &que);
queue& operator=(const queue &que);
queue的数据存取
queue.back();//返回最后一个元素
queue.front();//返回第一个元素
queue的大小:
queue.empty();//判断是否为空
queue.size();//返回队列的大小
stack的使用
stack是堆栈容器,是一种“先进后出”的容器。stack是简单地装饰deque容器而成为另外的一种容器。
使用前:
#include <stack>
using namespace std;
默认构造函数与vector,deque类似
stack的push与pop操作:
stack.push(elem);//往栈头添加元素
stack.pop();//从栈头移除第一个元素
stack对象的拷贝构造与赋值:
stack(const stack &stk);
stack &operator=(const stack &stk);
stack的数据存取:
stack.top();//返回最后一个压入栈的元素
stack的大小:
stack.empty();//判断堆栈是否为空
stack.size();//返回堆栈的大小
容器list的使用方法
list是一个双向链表容器,可以高效地进行插入删除元素,list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符。
list使用前准备
#include <list>
using namespace std;
list头尾的添加,移除操作
list.push_back(elem);//在容器尾部添加一个元素
list.pop_back();删除容器中的最后一个元素
list.push_front(elem);//在容器开头插入一个元素
list.pop_front();//从容器开头移除第一个元素
list的数据存取:
list.front();//返回第一个元素
list.back();//返回最后一个元素
list与迭代器:同vector
list.begin();
list.end();
list.rbegin();
list.rend();
list对象的带参数构造函数:
list(beg,end);
list(n,elem);
list(const list &lst);
list的赋值
list.assign(beg,end);
list.assign(n,elem);
list &operator=(const list &lst);
list.swap(lst);
list的大小
list.size();
list.empty();
list.resize(num);
list.resize(num,elem);
list的插入
list.insert(pos,elem);
list.insert(pos,n,elem);
list.insert(pos,beg,end);
list的删除(有不同):
list.clear();
list.erase(beg,end);
list.erase(pos);
list.remove(elem);删除容器中所有与elem值匹配的元素
list的反序排列
list.reverse();//反转链表,比如list包含1,3,5元素,运行此方法后,list就包含5,3,1元素