双端队列--Deque

双端队列也是可变长度数组,提供随机访问。和vector不同的地方是deque的头尾都开放,因此能在头尾两端进行快速安插和删除。

为了使用deque类型,必须包含头文件:

include <deque>

该类型是一个定义于namespace std内的template:

namespace std{
    template <typename T, typename Allocator = allocator<T>>
    class deque;
}
初始化
操作效果
deque cDefault构造函数,产生一个空deque,没有任何元素
deque c(c2)Copy构造函数,建立c2的同型deque并成为c2的一份拷贝(所有元素都被复制)
deque c = c2Copy构造函数,建立一个新的deque作为c2的拷贝(所有元素都被复制)
deque c(rv)Move构造函数,建立一个新的deque,取rvalue rv的内容
deque c = rvMove构造函数,建立一个新的deque,取rvalue rv的内容
deque c(n)利用元素的default构造函数生成一个大小为n的deque
deque c(n,elem)建立一个大小为n的deque,每个元素值都是elem
deque c(beg,end)建立一个deque,以区间[beg,end)作为元素初值
deque c(initlist)建立一个deque,以初值列initlist的元素为初值
deque c = initlist建立一个deque,以初值列initlist的元素为初值
c.~deque()销毁所有元素,释放内存
非变更型操作
操作效果
c.empty()返回是否容器为空(相当于size()==0但也许较快)
c.size()返回目前的元素个数
c.max_size()返回元素个数之最大可能量
c.shrink_to_fit()要求降低容量,以符合元素个数
c1 == c2返回c1是否等于c2(对每个元素调用==)
c1 != c2返回c1是否不等于c2(相当于!(c1==c2))
c1 < c2返回c1是否小于c2
c1 > c2返回c1是否大于c2(相当于c2<c1)
c1 <= c2返回c1是否小于等于c2(相当于!(c2<c1))
c1 >= c2返回c1是否大于等于c2(相当于!(c1<c2))
c[idx]返回索引idx所指的元素(不检查范围)
c.at(idx)返回索引idx所指的元素(如果idx超出范围就抛出range-error异常
c.front()返回第一元素(不检查是否存在第一元素)
c.back()返回最末元素(不检查是否存在最末元素)
c.begin()返回一个random-access iterator指向第一个元素
c.end()返回一个random-access iterator指向最末元素的下一位置
c.cbegin()返回一个const random-access iterator指向第一个元素
c.cend()返回一个const random-access iterator指向最末元素的下一位置
c.rbegin()返回一个反向的(reverse)iterator指向反向迭代的第一元素
c.rend()返回一个反向的(reverse)iterator指向反向迭代的最末元素的下一位置
c.crbegin()返回一个const reverse iterator指向反向迭代的第一元素
c.crend()返回一个const reverse iterator指向反向迭代的最末元素的下一位置
变更型操作
操作效果
c = c2将c2的全部元素赋值给c
c = rv将rvalue rv的所有元素以move assign方式给予c
c = initlist将初值列initlist的所有元素赋值给c
c.assign(n,elem)复制n个elem,赋值给c
c.assign(beg,end)将区间[beg,end)内的元素赋值给c
c.assign(initlist)将初值列initlist的所有元素赋值给c
c1.swap(c2)置换c1和c2的数据
swap(c1,c2)置换c1和c2的数据
c.push_back(elem)附加一个elem的拷贝于末尾
c.pop_back()移除最后一个元素,但是不返回它
c.push_front(elem)在头部插入elem的一个拷贝
c.pop_front()移除第一元素,但是不返回它
c.insert(pos,elem)在iterator位置pos之前插入一个elem拷贝,并返回新元素的位置
c.insert(pos,n,elem)在iterator位置pos之前插入n个elem拷贝,并返回第一个新元素的位置(或返回pos–如果没有新元素的话)
c.insert(pos,beg,end)在iterator位置pos之前插入区间[beg,end)内所有元素的一份拷贝,并返回第一个新元素的位置(或返回pos–如果没有新元素的话)
c.insert(pos,initlist)在iterator位置pos之前插入初值列initlist内所有元素的一份拷贝,并返回第一个新元素的位置(或返回pos–如果没有新元素的话
c.emplace(pos,args…)在iterator位置pos之前插入一个以args为初值的元素,并返回新元素的位置
c.emplace_back(args…)附加一个以args为初值的元素于末尾,不返回任何东西
c.emplace_front(args…)插入一个以args为初值的元素于起点,不返回任何东西
c.erase(pos)移除iterator位置pos上的元素,返回下一元素的位置
c.erase(beg,end)移除[beg,end)区间内的所有元素,返回下一元素的位置
c.resize(num)将元素数量改为num(如果size()变大,多出来的新元素都需以default构造函数完成初始化)
c.resize(num,elem)将元素数量改为num(如果size()变大,多出来的新元素都是elem的拷贝)
c.clear()移除所有元素,将容器清空
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值