std::deque是支持首尾O(1)增删和O(1)随机访问的分段连续序列容器,适合需频繁首尾操作又需索引访问的场景,但内存不连续、缓存局部性弱于vector。

std::deque(double-ended queue)是C++标准库中支持两端高效插入和删除的序列容器,底层通常以分段连续空间实现,兼顾了vector的随机访问和list的部分动态性。它不保证内存整体连续,但支持O(1)的头尾操作和O(1)的随机访问(下标/迭代器),适合频繁在首尾增删、又需要按索引读写的场景。
基本声明与初始化
包含头文件 #include
-
空构造:
std::deque<int> dq;</int> -
指定大小并初始化为默认值:
std::deque<int> dq(5); // 元素全为0</int> -
指定大小并初始化为给定值:
std::deque<int> dq(5, 42); // 5个42</int> -
用初始化列表构造(C++11起):
std::deque<:string> dq{"a", "b", "c"};</:string> -
拷贝或移动构造:
std::deque<int> dq2 = dq1;</int>或std::deque<int> dq2 = std::move(dq1);</int>
常用增删查改操作
所有操作均在头尾保持常数时间复杂度(摊还),中间插入/删除仍是O(n),应避免。
-
尾部操作:
dq.push_back(x)、dq.pop_back()、dq.back()(访问末元素,不检查空) -
头部操作:
dq.push_front(x)、dq.pop_front()、dq.front()(访问首元素,不检查空) -
随机访问:
dq[i]或dq.at(i)(后者带越界检查,抛出std::out_of_range) -
插入任意位置:
dq.insert(dq.begin() + pos, value)或批量插入dq.insert(it, first, last) -
删除任意位置:
dq.erase(it)或区间dq.erase(first, last)
遍历与容量管理
支持基于范围的for循环、迭代器遍历,也提供常见容量接口:
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~