C++——deque

什么是deque?

  1. deque(发音类似“deck”),是双端队列不规则的首字母缩写,双端队列是动态大小的序列式容器,其可
    以像两端进行伸缩。
  2. 特定的库可以以不同的方式实现deque,但通常都是一种动态数组。不论在何种情况下,它都允许通过
    随机访问迭代器直接访问单个元素,可以根据需要动态的伸缩。
  3. 因此,deque提供了一些与vector相似的功能,但deque在头部和尾部进行数据插入和删除操作更加高
    效。与vector不同的是,deque不能保证所有的元素存储在连续的空间中,在deque中通过指针加偏移
    量方式访问元素可能会导致非法的操作。
  4. vector与list提供了相似的接口,因此其具有类似的用途,但是内部的实现原理不同:vector使用使用了
    动态数组,该数组通常需要动态增长;deque中的元素可能分散在不同的存储块中,在deque中保存了
    一些必要的信息,通常用来在常数范围内直接访问deque中的任何一个元素,所以deque的内部实现比
    vector复杂,但是这些额外信息使得dque在某些情况下增长更加的高效,特别是在序列比较大,重新分
    配成本比较高的情况下。
  5. 除了在频繁在头部或尾部进行插入和删除操作外,deque比list和forward_list的性能更差。

应用:

deque的构造:

deque() 构造空的双端队列
deque(size_type n, const value_type& val =
value_type()) 用n个值为val的元素构造双端队列
deque(InputIterator first, InputIterator last) 用[first, last)的区间构造双端队列
deque(const deque& x) 双端队列的拷贝构造函数

deque的迭代器

iterator begin() ··返回deque起始位置迭代器
iterator end() ··返回deque最后一个元素下一个位置的迭代器
reverse_iterator rbegin() ··返回deque起始位置的反向迭代器(即end())
reverse_iterator rend() ··返回deque最后一个元素下一个位置的反向迭代器(begin())
const_iterator cbegin() const ··返回deque起始位置的const迭代器
const_iterator cend() const ··返回deque最后一个元素下一个位置的const迭代器
const_reverse_iterator crbegin() const ·返回deque起始位置的const反向迭代器(即crend())
const_reverse_iterator crend() const··返回deque最后一个元素下一个位置的const反向迭代器

deque的容量操作

size_type size() const 返回deque中有效元素个数
bool empty ( ) const 检测deque是否为空,是返回true,否则返回false
void resize ( size_type sz, T c = T()); 将deque中的元素改变到sz,多出的空间用c填充

deque访问操作

reference operator[] (size_type n) 返回deque中n位置上元素的引用
const_reference operator[] (size_type n) const 返回deque中n位置上元素的const 引用
reference front() 返回deque中首元素的引用
const_reference front() const 返回deque中首元素的const引用
reference back() 返回deque中最后一个元素的引用
const_reference back() const 返回deque中最后一个元素的const引用

元素操作

void push_back(const value_type& val) deque尾部插入元素val
void pop_back()** 删除deque尾部元素
void push_front (const value_type& val) deque头部插入元素val
void pop_front() 删除deque头部元素
iterator insert (iterator position, const value_type& val) 在deque的position位置插入值为val的元素
void insert (iterator position, size_type n, const value_type& val)在deque的position位置插入n个值为val的元素
void insert (iterator position, InputIterator first, InputIterator last)在deque的position位置插入[first, last)区间中的元素
iterator erase (iterator position) 删除deque中position位置的元素,并返回该位置的下一个位置
iterator erase (iterator first, iterator last) 删除deque中[first, last)区间中的元素,并返回last位置
void swap (deque& x) 交换两个deque中的内容
void clear() 将deque中的元素清空
iterator emplace (const_iterator position, Args&&… args)在deque的position位置构造元素,将元素所需内容通过参数类表传入
void emplace_front (Args&&… args) 在deque的头部构造元素,元素的参数通过参数列表传入
void emplace_back (Args&&… args) 在deque的尾部构造元素,元素的参数通过参数列表传入

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值