对于双向队列,与队列queue以及vector容器的区别就在于,名字不同,也就是它是双向的,可以从头开始操作,也可以从末尾开始操作。
双向队列的常用方法跟队列queue差不多:
头文件: #include<deque>
函数:
构造/析构
deque<int>q 构造一个空的双向队列
deque<int>q(q1) 构造q,并复制q1
deque<int>q(n) 创建deque,含有n个数据,数据均由缺省构造函数产生
deque<int>q(beg,end) 创建一个以[beg,end)区间的deque
q.~deque<int>() 销毁所有的数据,释放内存
赋值
q.assign(beg,end) 将[beg,end)区间中的数据赋值给q
q.assign(n,int) 将n个int 的拷贝值给q
数据访问
q.at(idx) 返回索引 idx 所指的数据,如果 idx 越界,抛出 out_of_range
q.fron() 返回第一个数据
q.back() 返回最后一个数据
q.begin() 返回指向第一个数据的迭代器
q.end() 返回指向最后一个数据的下一个位置的迭代器
q.rbegin() 返回逆向队列的第一个数据
q.rend() 返回指向逆向队列的最后一个数据的下一个位置的迭代器
加入数据
q.push_back() 在尾部加入一个数据
q.push_front() 在头部插入一个数据
q.insert(pos,int) 在pos 位置插入一个 int 数据的拷贝 ,返回新数据位置
q.insert(pos,n,int) 在pos 位置插入n 个 int 数据 ,无返回值
q.insert(pos,beg,end) 在pos位置插入在 [beg,end)区间的数据,无返回值
删除数据
q.pop_back() 删除最后一个数据
q.pop_front() 删除头部数据
q.erase(pos) 删除pos位置的数据 ,返回下一个数据的位置
q.erase(beg,end) 删除[begin,end) 区间的数据,返回下一个数据的位置
其他操作
q.empty() 判断容器是否为空
q.max_size() 返回容器中最大数据的数量
q.resize(num) 重新制定队列的长度
q.size() 返回容器中实际数据的个数
q.swap(q1) 将q和q1的元素互换
swap(q,q1) 同上