📜  C++标准模板库(STL)中的双端队列(1)

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

C++标准模板库(STL)中的双端队列

介绍

C++标准模板库(STL)中的双端队列是一种支持在队列两侧插入和删除元素的容器。双端队列类似于向量(vector),在访问元素方面能达到向量的高效性能,同时允许快速在其两端插入和删除元素。

在STL中,双端队列的容器类为std::deque,deque是double-ended queue的缩写。deque是由多个指向固定大小的数组的指针构成的,它支持从两端插入和删除元素,并且可以高效地随机访问元素。deque的存储空间是动态分配的,因此它的大小可以根据需要自行扩展。

示例代码

下面是一个简单的C++程序,演示如何使用std::deque创建双端队列并进行插入和删除操作:

#include <iostream>
#include <deque>

int main() {
    std::deque<int> myDeque;

    // 从队列前后插入元素
    myDeque.push_front(1);
    myDeque.push_back(2);
    myDeque.push_front(3);
    myDeque.push_back(4);

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

    // 删除队列前后的元素
    myDeque.pop_front();
    myDeque.pop_back();

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

    return 0;
}

以上代码中,我们首先创建一个std::deque容器对象myDeque,然后使用push_front和push_back方法向容器中插入4个元素。之后,我们使用循环打印队列中的元素,并使用pop_front和pop_back方法分别删除了队列前后的元素。

STL双端队列主要操作

在STL中,std::deque容器类的主要操作包括以下方法:

  • push_front(value): 向队列前端插入一个元素
  • push_back(value): 向队列后端插入一个元素
  • pop_front(): 删除队列前端的元素
  • pop_back(): 删除队列后端的元素
  • front(): 返回头部元素的引用
  • back(): 返回尾部元素的引用
  • empty(): 判断队列是否为空
  • size(): 返回队列的大小
优势和局限性

STL双端队列的优势:

  • 可以高效地从队列的两端插入和删除元素;
  • 支持随机访问元素;
  • 双端队列的存储空间是动态分配的,因此可以根据需要随时进行扩展。

STL双端队列的局限性:

  • 非线程安全,不支持多线程访问;
  • 相对于std::vector等STL容器,STL双端队列的内存占用较高;
  • 在大部分情况下,STL双端队列的效率与std::vector相当,但在某些情况下,效率会低于std::vector。
总结

STL双端队列是一种高效的双端存储容器,可以高效地在队列的两端进行插入和删除操作,并支持随机访问元素。总体来说,STL双端队列是一个非常有用的数据结构,在实际编程中会经常用到。