您的位置:首页 > 产品设计 > UI/UE

STL学习记录(五):Deque

2015-05-14 09:26 176 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: