std::deque的使用

本文介绍了C++标准库中的std::deque容器,它结合了Vector的随机访问特性与Deque的双向操作灵活性,重点讲解了其在两端插入和删除的高效优势。通过实例和接口对比,深入理解deque在实际项目中的应用.
std::deque 是 C++ 标准库中的一个双端队列容器,支持在头部和尾部高效地插入和删除元素,同时支持随机访问,其性能介于 std::vector 和 std::list 之间,适合需要频繁在两端操作数据的场景[^1]。 ### 基本操作 - **插入元素**:可以在头部和尾部插入元素。 ```cpp #include <iostream> #include <deque> int main() { std::deque<int> d; d.push_back(1); // 尾部插入 1 d.push_front(2); // 头部插入 2 return 0; } ``` - **删除元素**:可以移除头部和尾部的元素,也能移除指定位置的元素。 ```cpp #include <iostream> #include <deque> int main() { std::deque<int> d = {1, 2, 3}; d.pop_back(); // 移除尾部元素 d.pop_front(); // 移除头部元素 d.erase(d.begin()); // 移除指定位置的元素 return 0; } ``` - **指定位置插入元素**使用 `insert` 方法在指定位置插入元素。 ```cpp #include <iostream> #include <deque> int main() { std::deque<int> d = {1, 2, 3}; d.insert(d.begin() + 1, 3); // 在指定位置插入 3 return 0; } ``` - **清空元素**使用 `clear` 方法清空所有元素。 ```cpp #include <iostream> #include <deque> int main() { std::deque<int> d = {1, 2, 3}; d.clear(); // 清空所有元素 return 0; } ``` ### 大小操作 - **获取元素个数**使用 `size` 方法返回元素个数。 ```cpp #include <iostream> #include <deque> int main() { std::deque<int> d = {1, 2, 3}; std::cout << d.size() << std::endl; // 返回元素个数 return 0; } ``` - **判断是否为空**使用 `empty` 方法判断容器是否为空。 ```cpp #include <iostream> #include <deque> int main() { std::deque<int> d = {1, 2, 3}; std::cout << d.empty() << std::endl; // 判断是否为空 return 0; } ``` ### 排序操作 可以使用 `<algorithm>` 库中的 `sort` 方法对 deque 进行排序。 ```cpp #include <iostream> #include <deque> #include <algorithm> int main() { std::deque<int> d = {4, 1, 3, 2}; std::sort(d.begin(), d.end()); // 对 deque 排序 for (int val : d) { std::cout << val << " "; } return 0; } ``` ### 遍历操作 可以使用迭代器或基于范围的循环进行遍历。 ```cpp #include <iostream> #include <deque> int main() { std::deque<int> d = {1, 2, 3}; for (auto it = d.begin(); it != d.end(); ++it) { std::cout << *it << " "; } for (int val : d) { // 基于范围的循环 std::cout << val << " "; } return 0; } ``` ### 容量管理 std::deque 也有一些容量管理的方法,如 `reserve()`、`shrink_to_fit()`、`capacity()`、`max_size()`、`resize()` 等,可参考相关资料进一步了解其具体用法[^2]。 ### 应用场景 std::deque 适合需要频繁在两端操作数据的场景,但它并没有取代 std::vector,因为它们的设计目标和优化方向不同,各有适用场景[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值