请解释 C++ STL 中 deque 的内部实现原理,它是如何组织的?
考察说明
考察对 STL deque 内存布局与迭代器设计的理解。
回答思路
- 【回答框架 1】deque 采用分段连续存储,由中控器 map(指针数组)管理多个固定大小的缓冲区,每个缓冲区独立连续,整体逻辑连续。
- 【回答框架 2】插入或删除两端时,在端部缓冲区预留空间,必要时新增缓冲区并更新中控器,保证两端操作接近 O(1)。
- 【回答框架 3】迭代器维护指向中控器、当前缓冲区及其首尾的指针,通过偏移与跨缓冲区跳转实现随机访问。
- 【回答框架 4】相比 vector 和 list,deque 支持随机访问且两端高效,但中间插入删除代价高,内存占用略多。
- 【关键点 1】分段连续存储,逻辑连续,物理不连续。
- 【关键点 2】中控器 map 管理缓冲区,缓冲区大小因实现而异。
- 【关键点 3】两端插入删除接近 O(1),可随机访问。
- 【易错点 1】deque 的随机访问比 vector 慢,因多一次间接寻址。
- 【易错点 2】插入元素不保证迭代器失效,除两端外中间操作可能使全部迭代器失效。