STL学习之双端队列deque(AI生成版)

在 C++ 里,deque(双端队列)属于标准模板库(STL)容器,其特点是能在队列的头部和尾部高效地进行元素插入与删除操作。下面将对deque的定义、常用函数以及应用场景展开介绍。

定义

在使用deque前,需引入头文件,同时使用std命名空间。下面是定义deque对象的常见方式:

#include 
#include 

int main() {
    // 定义一个存储int类型元素的deque
    std::deque myDeque;

    // 定义一个包含5个元素,且每个元素初始值为10的deque
    std::deque myDequeWithInitialValue(5, 10);

    return 0;
}

常用函数

以下是deque的一些常用函数:

插入元素

  • push_back():在队列尾部添加元素。
  • push_front():在队列头部添加元素。
  • insert():在指定位置插入元素。
#include 
#include 

int main() {
    std::deque myDeque;

    // 在尾部添加元素
    myDeque.push_back(1);
    myDeque.push_back(2);

    // 在头部添加元素
    myDeque.push_front(0);

    // 在指定位置插入元素
    auto it = myDeque.begin() + 1;
    myDeque.insert(it, 3);

    for (int num : myDeque) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

删除元素

  • pop_back():删除队列尾部的元素。
  • pop_front():删除队列头部的元素。
  • erase():删除指定位置或指定范围的元素。
#include 
#include 

int main() {
    std::deque myDeque = {0, 1, 2, 3};

    // 删除尾部元素
    myDeque.pop_back();

    // 删除头部元素
    myDeque.pop_front();

    // 删除指定位置的元素
    auto it = myDeque.begin();
    myDeque.erase(it);

    for (int num : myDeque) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

访问元素

  • []:通过下标访问元素。
  • at():通过下标访问元素,会进行边界检查。
  • front():访问队列头部的元素。
  • back():访问队列尾部的元素。
#include 
#include 

int main() {
    std::deque myDeque = {0, 1, 2, 3};

    // 通过下标访问元素
    std::cout << myDeque[1] << std::endl;

    // 通过at()访问元素
    std::cout << myDeque.at(2) << std::endl;

    // 访问头部元素
    std::cout << myDeque.front() << std::endl;

    // 访问尾部元素
    std::cout << myDeque.back() << std::endl;

    return 0;
}

其他常用函数

  • size():返回队列中元素的数量。
  • empty():判断队列是否为空。
  • clear():清空队列中的所有元素。
#include 
#include 

int main() {
    std::deque myDeque = {0, 1, 2, 3};

    // 获取队列的大小
    std::cout << "Size: " << myDeque.size() << std::endl;

    // 判断队列是否为空
    std::cout << "Is empty: " << (myDeque.empty() ? "Yes" : "No") << std::endl;

    // 清空队列
    myDeque.clear();
    std::cout << "Is empty after clear: " << (myDeque.empty() ? "Yes" : "No") << std::endl;

    return 0;
}

应用场景

  • 实现栈和队列:由于deque支持在头部和尾部高效地插入和删除元素,所以它可以用来实现栈(后进先出)和队列(先进先出)。
  • 需要在两端频繁插入和删除元素的场景:例如,在一个任务调度系统中,新任务可能会在队列头部插入,而完成的任务会从队列尾部删除。

你可能感兴趣的:(c++,学习,算法)