std::deque:
std::deque
是 C++ 标准库中的一个双端队列容器。它允许在两端进行高效的插入和删除操作,适用于需要在序列的两端进行频繁操作的场景。
基本特性
- 双端操作: 支持在队列的前端和后端高效地插入和删除元素。
- 随机访问: 支持高效的随机访问元素,类似于
std::vector
。 - 动态大小:
std::deque
会自动调整大小,管理内存。
常用操作
以下是 std::deque
的一些常用操作及示例:
1. 创建 std::deque
#include <deque>
#include <iostream>
int main() {
// 创建一个空的 deque,元素类型为 int
std::deque<int> deq1;
// 创建一个初始化为 10 个元素的 deque,元素值为 0
std::deque<int> deq2(10);
// 创建一个初始化为 10 个元素的 deque,元素值为 5
std::deque<int> deq3(10, 5);
// 使用初始化列表创建 deque
std::deque<int> deq4 = {1, 2, 3, 4, 5};
return 0;
}
2. 访问和修改元素
#include <deque>
#include <iostream>
int main() {
std::deque<int> deq = {10, 20, 30, 40, 50};
// 通过下标访问
std::cout << "Element at index 2: " << deq[2] << std::endl;
// 使用 at() 方法访问,提供边界检查
std::cout << "Element at index 3: " << deq.at(3) << std::endl;
// 修改元素
deq[2] = 100;
std::cout << "Modified element at index 2: " << deq[2] << std::endl;
return 0;
}
3. 添加和删除元素
#include <deque>
#include <iostream>
int main() {
std::deque<int> deq;
// 添加元素到末尾
deq.push_back(10);
deq.push_back(20);
deq.push_back(30);
// 添加元素到前面
deq.push_front(0);
deq.push_front(-10);
std::cout << "Deque size after push_back and push_front: " << deq.size() << std::endl;
// 删除末尾元素
deq.pop_back();
// 删除前面元素
deq.pop_front();
std::cout << "Deque size after pop_back and pop_front: " << deq.size() << std::endl;
return 0;
}
4. 遍历 std::deque
#include <deque>
#include <iostream>
int main() {
std::deque<int> deq = {1, 2, 3, 4, 5};
// 使用范围 for 循环
for (const auto& elem : deq) {
std::cout << elem << " ";
}
std::cout << std::endl;
// 使用迭代器遍历
for (auto it = deq.begin(); it != deq.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
5. 其他常用方法
size()
: 返回deque
中元素的数量。empty()
: 判断deque
是否为空。clear()
: 清空deque
中的所有元素。front()
: 访问deque
的第一个元素。back()
: 访问deque
的最后一个元素.resize()
: 调整deque
的大小,新增元素会使用默认构造函数初始化。
示例
#include <deque>
#include <iostream>
int main() {
std::deque<int> deq = {1, 2, 3, 4, 5};
// 输出前端和后端元素
std::cout << "Front element: " << deq.front() << std::endl;
std::cout << "Back element: " << deq.back() << std::endl;
// 修改前端和后端元素
deq.front() = 10;
deq.back() = 50;
std::cout << "Modified front element: " << deq.front() << std::endl;
std::cout << "Modified back element: " << deq.back() << std::endl;
// 调整大小
deq.resize(8, 0); // 增加元素,并用 0 填充
std::cout << "Size after resizing to 8: " << deq.size() << std::endl;
return 0;
}