C++ STL deque容器

风陵南·2024-05-13 02:23·18 次阅读

C++ STL deque容器

deque 容器

  • deque (读作deck)是“doble-ended-queue”的缩写,和vector一样都是STL的容器
  • deque是双端数组,而vector是单端
    • 单端与双端:vector 在首部插入数据时,会在末端开辟新位置,然后整体移动过去,而deque在首部插入数据时,能够直接在首部前开辟空间存储插入数据而避免了移动,在末端插入数据也可在末端开辟新空间,所以称为双端。
  • deque在接口上和vector非常相似,许多操作可以直接替换
    • deque比vector多了两个函数
      • deque.push_front(elem)  在容器头部插入数据
      • deque.pop_front()  删除容器头部的数据
  • deque在头部和尾部添加移除元素都非常快速,但在中部安插或移除元素比较费时。
  • #include "deque"
  • 实际应用过程中,首选使用vector,当有频繁的需要在头部的插入元素的需求时,才会考虑使用deque。

 

deque与vector容器最大的差异#

没有容量的概念,它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来。

deque也提供了Random Access Iterator,但是它的迭代器并不是普通的指针,其复杂度和vector不是一个量级,这当然影响各个运算的层面。因此,除非有必要,我们应该尽可能选择使用vector,而不是deque。对deque进行排序操作,为了最高效率,可将deque先完整复制到一个vector中,对vector容器进行排序,再复制回deque

deque容器常用操作#

deque构造函数#

Copy
deque<T> deqT;//默认构造形式
deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。
deque(n, elem);//构造函数将n个elem拷贝给本身。
deque(const deque &deq);//拷贝构造函数。

deque赋值操作#

Copy
assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
assign(n, elem);//将n个elem拷贝赋值给本身。
deque& operator=(const deque &deq); //重载等号操作符
swap(deq);// 将deq与本身的元素互换

deque大小操作#

Copy
deque.size();//返回容器中元素的个数
deque.empty();//判断容器是否为空
deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。
deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。

deque双端操作和删除#

Copy
push_back(elem);//在容器尾部添加一个数据
push_front(elem);//在容器头部插入一个数据
pop_back();//删除容器最后一个数据
pop_front();//删除容器第一个数据

deque数据存取#

Copy
at(idx);//返回索引idx所指的数据,如果idx越界,抛出out_of_range。
operator[];//返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
front();//返回第一个数据。
back();//返回最后一个数据

deque插入操作#

Copy
insert(pos,elem);//pos位置插入一个elem元素的拷贝,返回新数据的位置。
insert(pos,n,elem);//pos位置插入n个elem数据,无返回值。
insert(pos,beg,end);//pos位置插入[beg,end)区间的数据,无返回值。

deque删除操作#

Copy
clear();//移除容器的所有数据
erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
erase(pos);//删除pos位置的数据,返回下一个数据的位置。
posted @   风陵南  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示
目录