c++ std::deque使用笔记
·
std::deque(双端队列)是 C++ 标准库中的一个容器,支持在头部和尾部高效地插入和删除元素。它的底层实现通常是一个动态数组的分段存储结构,因此它既支持随机访问,又支持在两端高效操作。
以下是 std::deque 的简单使用方法:
1. 包含头文件
首先需要包含 <deque> 头文件:
#include <deque>
#include <iostream>
2. 创建和初始化
可以创建一个空的 std::deque,或者使用初始化列表进行初始化:
std::deque<int> dq1; // 创建一个空的 deque
std::deque<int> dq2 = {1, 2, 3, 4, 5}; // 使用初始化列表
3. 添加元素
可以在头部或尾部插入元素:
dq1.push_back(10); // 在尾部插入元素
dq1.push_back(20);
dq1.push_front(5); // 在头部插入元素
dq1.push_front(1);
4. 访问元素
可以通过下标或 at() 方法访问元素:
std::cout << "First element: " << dq1[0] << std::endl; // 访问第一个元素
std::cout << "Second element: " << dq1.at(1) << std::endl; // 访问第二个元素
5. 遍历元素
可以使用范围 for 循环或迭代器来遍历 std::deque:
// 使用范围 for 循环
for (const auto& elem : dq2) {
std::cout << elem << " ";
}
std::cout << std::endl;
// 使用迭代器
for (auto it = dq1.begin(); it != dq1.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
6. 删除元素
可以从头部或尾部删除元素:
dq1.pop_back(); // 删除尾部元素
dq1.pop_front(); // 删除头部元素
7. 其他常用操作
size():返回deque中元素的数量。empty():检查deque是否为空。clear():清空deque。insert():在指定位置插入元素。erase():删除指定位置的元素。
if (!dq1.empty()) {
std::cout << "Deque size: " << dq1.size() << std::endl;
}
dq1.clear(); // 清空 deque
// 在第二个位置插入 100
auto it = dq2.begin() + 1;
dq2.insert(it, 100);
// 删除第三个元素
dq2.erase(dq2.begin() + 2);
8. 示例代码
以下是一个完整的示例代码:
#include <deque>
#include <iostream>
int main() {
std::deque<int> dq = {1, 2, 3, 4, 5};
// 在头部和尾部插入元素
dq.push_front(0);
dq.push_back(6);
// 遍历并打印元素
std::cout << "Deque elements: ";
for (const auto& elem : dq) {
std::cout << elem << " ";
}
std::cout << std::endl;
// 访问元素
std::cout << "First element: " << dq[0] << std::endl;
std::cout << "Last element: " << dq.at(dq.size() - 1) << std::endl;
// 删除头部和尾部元素
dq.pop_front();
dq.pop_back();
// 再次遍历并打印元素
std::cout << "Deque after pop: ";
for (const auto& elem : dq) {
std::cout << elem << " ";
}
std::cout << std::endl;
// 插入和删除元素
auto it = dq.begin() + 2;
dq.insert(it, 100); // 在第三个位置插入 100
dq.erase(dq.begin() + 1); // 删除第二个元素
// 最终遍历并打印元素
std::cout << "Final deque: ";
for (const auto& elem : dq) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
输出结果:
Deque elements: 0 1 2 3 4 5 6
First element: 0
Last element: 6
Deque after pop: 1 2 3 4 5
Final deque: 1 100 3 4 5
总结
std::deque 是一个功能强大的双端队列容器,支持在头部和尾部高效地插入和删除元素,同时支持随机访问。它的性能介于 std::vector 和 std::list 之间,适合需要频繁在两端操作数据的场景。
更多推荐
所有评论(0)