STL顺序容器Deque
Deque简介
Deque其实就是数据结构中的双端队列,与Vector类似它是一个支持随机访问的顺序容器。但是比Deque更强大的是它支持在队头和队尾快速的插入和删除元素。Deque通常以动态数组的形式实现,这保证了元素访问可以在常数时间内完成,并且在队头和队尾的插入和删除也可以在常数时间内完成。但是在中间的插入删除操作则是线性的。
元素访问
操作 | 说明 |
---|
deq.at(pos) | 返回deq位于pos 的元素的引用,该操作会进行范围检查。 |
deq[pos] | 返回deq位于pos 的元素的引用,不进行边界检查 |
deq.front( ) | 返回deq的第一个元素的引用 |
deq.back( ) | 返回deq的最后一个元素的引用 |
迭代器
操作 | 说明 |
---|
deq.begin( ) | 返回deq的第一个元素的迭代器iterator |
deq.end( ) | 返回deq的最后一元素的迭代器iterator |
deq.cbegin( ) | 返回deq的第一个元素的迭代器const_iterator |
deq.cend( ) | 返回deq的最后一个元素的迭代器const_iterator |
deq.rbegin( ) | 返回deq逆序的第一个元素的反向迭代器reverse_iterator |
deq.rend( ) | 返回deq逆序的最后一个元素的反向迭代器reverse_iterator |
deq.crbegin( ) | 返回deq逆序的第一个元素的const型反向迭代器const_reverse_iterator |
deq.crend( ) | 返回deq逆序的最后一个元素的const型反向迭代器const_reverse_iterator |
容量
操作 | 说明 |
---|
deq.size( ) | 返回deq里面元素的个数 |
deq.empty( ) | 判断deq是否为空 |
deq.max_size( ) | 返回deq的最大的容量 |
deq.shrink_to_fit( ) | 移除未使用的空间容量(c++11) |
修改类
操作 | 说明 |
---|
deq.clear( ) | 删除deq中的所有元素 |
deq.erase(pos) | 删除位于pos的元素 |
deq.erase(beg,end) | 删除位于[beg,end)之间的元素 |
deq.resize(num) | 重置deq的大小,若deq变大则新增元素使用该元素默认构造函数构造 |
deq.resize(num,elem) | 重置deq的大小,若deq变大则新增元素使用elem 的拷贝 |
swap(deq1,deq2) | 交换deq1与deq2 数据 |
deq1.swap(deq2) | 交换deq1与deq中的所有数据 |
deq.assign(n,elem) | 将n个元素elem的拷贝赋值给deq |
deq.assign(beg,end) | 将[beg,end)范围内的元素赋值给deq |
deq.assign({*x1,x2,……}) | 将初始化列表中的所有元素都赋值给deq |
deq.push_back(elem) | 将elem加到deq的末尾 |
deq.push_front(elem) | 将elem加到deq的前面 |
deq.pop_back( ) | 移除deq中的最后一个元素(不是返回该值) |
deq.pop_front( ) | 移除deq中的第一个元素(不是返回该值) |
deq.insert(pos,elem) | 在pos之前插入elem的拷贝并返回该元素的位置 |
deq,insert(pos,n,elem) | 在pos之前插入n个elem的拷贝并返回第一个拷贝的位置(当n==0返回pos |
deq.insert(pos,beg,end) | 将[beg,end)之间的元素插入到pos之前(当beg==end返回pos |
deq.emplace(pos,args…) | 将用参数args…初始化的元素插入到pos之前并返回该元素的位置c++11 |
deq.emplace_back(args…) | 将用参数args…初始化的元素添加到deq的末尾(不返回任何值)c++11 |
deq.insert(pos,{*x1,x2,…}* | 将列表{*x1,x2,…}中所有元素的拷贝插入到*pos之前并返回第一个拷贝的位置(当为空时返回pos)c++11 |
代码实例:
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
deque<string> deq;
deq.assign(3,string("string"));
deq.push_back("last string");
deq.push_front("first string");
copy(deq.cbegin(),deq.cend(),ostream_iterator<string>(cout,"\n"));
cout<<endl;
deq.pop_front();
deq.pop_back();
for(int i=1;i<deq.size();++i)
deq[i] = "another" + deq[i];
deq.resize(4,"resize string");
copy(deq.cbegin(),deq.cend(),ostream_iterator<string>(cout,"\n"));
return 0;
}
程序的输出:
first string
string
string
string
last string
string
another string
another string
resized string