STL学习记录(五):Deque

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)交换deq1deq2 数据
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之前插入nelem的拷贝并返回第一个拷贝的位置(当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

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/yourfirst/blog/513771

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值