C++ 笔记 ——STL deque
deque是 STL 中双端队列容器全称double-ended queue结合了vector和list的核心优势支持随机访问、头尾两端高效增删元素是开发中处理双端操作场景的首选容器。本文从基础认知、初始化、核心 API、底层原理、迭代器、容器对比、核心考点七个维度整理适配学习与面试。一、deque 基础认知本质分段连续内存实现的双端队列STL 序列式容器。核心特点支持头部、尾部O (1) 时间复杂度增删元素vector 不支持头部高效操作支持随机访问[]、at()和 vector 一致list 不支持内存管理分段连续存储无整体扩容开销中间插入 / 删除效率低需要移动元素。头文件#include deque using namespace std;二、deque 的定义与初始化用法与vector几乎完全一致学习成本极低#include iostream #include deque using namespace std; int main() { // 1. 空容器 dequeint d1; // 2. 指定大小默认值0 dequeint d2(5); // 3. 指定大小初始值 dequeint d3(5, 10); // 4. 列表初始化 dequeint d4 {1,2,3,4}; // 5. 拷贝初始化 dequeint d5(d4); return 0; }三、deque 核心常用 API1. 元素访问与 vector 完全一致表格方法作用d[i]随机访问不检查越界d.at(i)随机访问越界抛异常d.front()获取首元素d.back()获取尾元素2. 增删元素双端操作核心优势表格方法作用时间复杂度push_back(val)尾部插入O(1)emplace_back(val)尾部原位构造O(1)pop_back()删除尾部元素O(1)push_front(val)头部插入O(1)emplace_front(val)头部原位构造O(1)pop_front()删除头部元素O(1)insert(pos, val)指定位置插入O(n)erase(pos)删除指定位置元素O(n)clear()清空所有元素O(n)3. 容量操作表格方法作用size()获取元素个数empty()判断是否为空resize(n)调整元素数量reserve()deque 无此方法无整体扩容四、deque 底层原理面试核心deque不是一整块连续内存这是和 vector 最大的区别底层由多个独立的连续内存缓冲区分段组成维护一个中控器map 数组记录所有分段缓冲区的地址头尾插入元素时直接开辟新的分段缓冲区无需拷贝旧数据逻辑上连续物理上分段连续。✅ 优势无 vector 的扩容开销头尾增删极致高效❌ 劣势中间插入 / 删除需要移动元素效率低。五、deque 的迭代器结合你之前学习的STL 迭代器知识点deque 迭代器是重点迭代器类型随机访问迭代器和 vector 一致支持、--、n、[]底层实现封装了中控器 分段缓冲区指针比 vector 迭代器复杂不是原生指针遍历用法与 vector、list 通用支持迭代器、范围 for、下标遍历代码示例六、deque /vector/list 核心对比面试必背表格特性vectordequelist内存结构整块连续分段连续非连续双向链表随机访问支持支持不支持头部增删O (n)低效O (1)高效O (1)高效尾部增删O(1)O(1)O(1)中间增删O(n)O(n)O(1)迭代器类型随机访问随机访问双向迭代器失效扩容 / 插入 / 删除均失效仅中间操作失效仅删除位置失效七、总结核心考点浓缩deque 是分段连续内存的双端队列支持随机访问头尾增删效率为 O (1)核心 APIpush_front/pop_front是区别于 vector 的关键方法迭代器随机访问迭代器底层封装中控器与分段指针用法与 vector 一致底层无整体扩容多段内存 中控器管理兼顾访问效率与双端操作迭代器失效头尾增删不失效中间插入 / 删除会导致迭代器失效适用场景需要头尾频繁操作、随机访问替代 vector 头部操作的场景面试高频deque 底层结构、与 vector/list 的区别、迭代器类型、迭代器失效规则。