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

2021年3月11日17:54:07 发表评论 877 次浏览

双头队列是序列容器, 两端都有扩展和收缩功能。

它们类似于载体, 但是在插入和删除元素的情况下效率更高。与向量不同, 可能无法保证连续的存储分配。

双端队列基本上是数据结构双端队列的一种实现。队列数据结构仅允许在末尾插入而从前部删除。这就像现实生活中的队列, 其中人员从前面移开, 在后面增加。双端队列是队列的一种特殊情况, 在两端都可以进行插入和删除操作。

双端队列的功能与向量, 并在正面和背面都添加了推入和弹出操作。

#include <iostream>
#include <deque>
  
using namespace std;
  
void showdq(deque < int > g)
{
     deque < int > :: iterator it;
     for (it = g.begin(); it != g.end(); ++it)
         cout << '\t' << *it;
     cout << '\n' ;
}
  
int main()
{
     deque < int > 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中的双端队列insert()函数:插入一个元素。并返回一个指向新插入元素的第一个的迭代器。
  • C ++ STL中的双端队列rbegin()函数:返回一个反向迭代器, 该迭代器指向双端队列的最后一个元素(即其反向开始)。
  • C ++ STL中的双端队列rend()函数:返回一个反向迭代器, 该迭代器指向双端队列的开始之前的位置(该位置被视为反向端)。
  • C ++ STL中的双端队列cbegin():返回一个常量迭代器, 该迭代器指向容器的第一个元素, 即, 迭代器不能用于修改, 只能遍历双端队列。
  • C ++ STL中的双端队列max_size()函数:返回双端队列容器可以容纳的最大元素数。
  • C ++ STL中的双端队列Assign()函数:将值分配给相同或不同的双端队列容器。
  • C ++ STL中的双端队列resize()函数:更改双端队列大小的功能。
  • C ++ STL中的deque :: push_front():此功能用于将元素从前面推入双端队列。
  • C ++ STL中的deque :: push_back():此功能用于将元素从背面推入双端队列。
  • C ++ STL中的deque :: pop_front()和deque :: pop_back():pop_front()函数用于从前面的双端队列中弹出或删除元素。pop_back()函数用于从背面的双端队列中弹出或删除元素。
  • C ++ STL中的deque :: front()和deque :: back():面前()函数用于引用双端队列容器的第一个元素。背部()函数用于引用双端队列容器的最后一个元素。
  • C ++ STL中的deque :: clear()和deque :: erase():明确()函数用于删除双端队列容器的所有元素, 从而使其大小为0。擦除()函数用于从指定位置或指定范围内删除容器中的元素。
  • C ++ STL中的deque :: empty()和deque :: size():空()函数用于检查双端队列容器是否为空。尺寸()函数用于返回双端队列容器的大小或双端队列容器中的元素数。
  • C ++ STL中的deque :: operator =和deque :: operator []:
    运算符=运算符用于通过替换现有内容将新内容分配给容器。运算符[]运算符用于引用出现在运算符内部给定位置的元素。
  • C ++ STL中的deque :: at()和deque :: swap():在()函数用于引用在给定位置的元素, 该元素作为函数的参数。交换()函数用于将一个双端队列的内容与相同类型和大小的另一个双端队列交换。
  • C ++ STL中的deque :: begin()和deque :: end:开始()函数用于返回指向双端队列容器的第一个元素的迭代器。结束()函数用于返回指向双端队列容器最后一个元素的迭代器。
  • C ++ STL中的deque :: emplace_front()和deque :: emplace_back():emplace_front()函数用于将新元素插入双端队列容器。新元素将添加到双端队列的开头。emplace_back()函数用于将新元素插入双端队列容器。新元素将添加到双端队列的末尾。

最近关于双端队列的文章

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。

被认为是行业中最受欢迎的技能之一, 我们拥有自己的编码基础C ++ STL通过激烈的问题解决过程来训练和掌握这些概念。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: