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

📅  最后修改于: 2021-05-30 11:43:02             🧑  作者: Mango

双头队列是序列容器,两端都有扩展和收缩功能。
它们类似于载体,但是在插入和删除元素的情况下效率更高。与向量不同,可能无法保证连续的存储分配。
双端队列基本上是数据结构双端队列的一种实现。队列数据结构仅允许在末尾插入而从前部删除。这就像现实生活中的队列,其中人们从前面移开并在后面增加。双头队列是队列的一种特殊情况,其中两端都可以进行插入和删除操作。

双端队列的功能与矢量相同,在正面和背面都增加了推入和弹出操作。

#include 
#include 
  
using namespace std;
  
void showdq(deque  g)
{
    deque  :: iterator it;
    for (it = g.begin(); it != g.end(); ++it)
        cout << '\t' << *it;
    cout << '\n';
}
  
int main()
{
    deque  gquiz;
    gquiz.push_back(10);
    gquiz.push_front(20);
    gquiz.push_back(30);
    gquiz.push_front(15);
    cout << "The deque gquiz is : ";
    showdq(gquiz);
  
    cout << "\ngquiz.size() : " << gquiz.size();
    cout << "\ngquiz.max_size() : " << gquiz.max_size();
  
    cout << "\ngquiz.at(2) : " << gquiz.at(2);
    cout << "\ngquiz.front() : " << gquiz.front();
    cout << "\ngquiz.back() : " << gquiz.back();
  
    cout << "\ngquiz.pop_front() : ";
    gquiz.pop_front();
    showdq(gquiz);
  
    cout << "\ngquiz.pop_back() : ";
    gquiz.pop_back();
    showdq(gquiz);
  
    return 0;
}

上面程序的输出是:

The deque gquiz is :     15    20    10    30

gquiz.size() : 4
gquiz.max_size() : 4611686018427387903
gquiz.at(2) : 10
gquiz.front() : 15
gquiz.back() : 30
gquiz.pop_front() :     20    10    30

gquiz.pop_back() :     20    10

双端队列的方法:

  • C++ STL中的deque insert()函数:插入一个元素。并返回一个指向新插入元素的第一个的迭代器。
  • C++ STL中的deque rbegin()函数:返回一个反向迭代器,该迭代器指向双端队列的最后一个元素(即,其反向开始)。
  • C++ STL中的deque rend()函数:返回一个反向迭代器,该迭代器指向双端队列开始之前的位置(该位置被认为是其反向端)。
  • C++ STL中的deque cbegin():返回一个常量迭代器,该迭代器指向容器的第一个元素,即,迭代器不能用于修改,只能遍历双端队列。
  • C++ STL中的deque max_size()函数:返回双端队列容器可以容纳的最大元素数。
  • C++ STL中的双端队列Assign()函数:将值分配给相同或不同的双端队列容器。
  • C++ STL中的deque resize()函数:更改双端队列大小的函数。
  • C++ STL中的deque :: push_front():此函数用于将元素从前端推入双端队列。
  • C++ STL中的deque :: push_back():此函数用于将元素从背面推入双端队列。
  • C++ STL中的deque :: pop_front()和deque :: pop_back(): pop_front()函数用于从前端的双端队列中弹出或删除元素。 pop_back()函数用于从背面的双端队列中弹出或删除元素。
  • C++中的deque :: front()和deque :: back()函数: front()函数用于引用deque容器的第一个元素。 back()函数用于引用双端队列容器的最后一个元素。
  • 双端队列::明确()和在C++ STL双端队列::擦除():clear()函数是用来除去双端队列容器中的所有元素,因此使得它的尺寸为0的擦除()函数是用来除去从一个元件指定位置或范围内的容器。
  • C++ STL中的deque :: empty()和deque :: size()函数: empty()函数用于检查deque容器是否为空。 size()函数用于返回双端队列容器的大小或双端队列容器中的元素数。
  • C++ STL中的deque :: 运算符=和deque :: 运算符[]:
    运算符=运算符用于通过替换现有内容将新内容分配给容器。 运算符[] 运算符用于引用存在于运算符内部给定位置的元素。
  • C++ STL: at()函数的deque :: at()和deque :: swap()用于引用存在于指定位置的元素,该位置作为函数的参数。 swap()函数用于将一个双端队列的内容与相同类型和大小的另一个双端队列交换。
  • C++中的deque :: begin()和deque :: end STL: begin()函数用于返回指向deque容器的第一个元素的迭代器。 end()函数用于返回指向双端队列容器的最后一个元素的迭代器。
  • C++ STL中的deque :: emplace_front()和deque :: emplace_back()函数: emplace_front()函数用于在deque容器中插入新元素。新元素将添加到双端队列的开头。 emplace_back()函数用于将新元素插入双端队列容器。新元素将添加到双端队列的末尾。

最近关于双端队列的文章

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”