📜  C++ 中的双端队列与示例(1)

📅  最后修改于: 2023-12-03 14:59:48.420000             🧑  作者: Mango

C++ 中的双端队列

在 C++ 中,我们可以使用标准库中的 deque 类来实现双端队列。双端队列是一种可以在队列的两端进行插入和删除操作的数据结构。

deque 的简介

deque 具有以下特点:

  • 可以在队列的头部和尾部进行插入和删除操作,因此支持队列和栈的操作。
  • 与 vector 不同的是,deque 内部使用多块连续的内存存储数据,因此可以更高效地进行插入删除操作。
  • deque 中的元素可以随时在中间插入和删除,因此支持随机存取。
deque 的基本操作

deque 支持以下基本操作:

  • push_back(val):将元素 val 添加到 deque 的尾部。
  • push_front(val):将元素 val 添加到 deque 的头部。
  • pop_back():将队尾元素删除。
  • pop_front():将队头元素删除。
  • size():返回 deque 的元素个数。
  • empty():判断 deque 是否为空。
  • front():返回队头元素的引用。
  • back():返回队尾元素的引用。

下面是一个使用 deque 的示例代码:

#include <iostream>
#include <deque>

using namespace std;

int main()
{
    deque<int> d;

    // 在队尾插入元素
    d.push_back(1);
    d.push_back(2);
    d.push_back(3);

    // 在队头插入元素
    d.push_front(0);

    // 打印队列中的元素
    for (auto it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    // 弹出队尾元素
    d.pop_back();

    // 弹出队头元素
    d.pop_front();

    // 打印队列中的元素
    for (auto it = d.begin(); it != d.end(); it++)
    {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

输出结果为:

0 1 2 3
1 2
示例解释

在上面的代码中,我们首先创建了一个 deque 对象 d。然后使用 push_back 和 push_front 操作在队列的尾部和头部插入了一些元素。

接着,我们使用循环打印出队列中的元素。

然后使用 pop_back 和 pop_front 操作分别删除队尾和队头元素。

最后再次打印队列中的元素,可以看到队尾和队头的元素被成功删除。

总结

双端队列是一种在队列头部和尾部都可以进行插入和删除操作的数据结构,在 C++ 中可以使用标准库中的 deque 类来实现。deque 中支持多种操作,包括在队头和队尾插入和删除操作、队列大小和是否为空的判断、以及随机访问元素等操作。双端队列可以方便地实现栈和队列的操作,同时也可以支持随机访问元素的操作。