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); |
| deque(n, elem); |
| deque(const deque &deq); |
deque赋值操作#
Copy
| assign(beg, end); |
| assign(n, elem); |
| deque& operator=(const deque &deq); |
| swap(deq); |
deque大小操作#
Copy
| deque.size(); |
| deque.empty(); |
| deque.resize(num); |
| deque.resize(num, elem); |
deque双端操作和删除#
Copy
| push_back(elem); |
| push_front(elem); |
| pop_back(); |
| pop_front(); |
deque数据存取#
Copy
| at(idx); |
| operator[]; |
| 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); |
| erase(pos); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)