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::vectorstd::list 之间,适合需要频繁在两端操作数据的场景。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐