[C++]-deque 双端队列

什么是双端队列

双端队列(Double Ended Queue)是一种支持首尾端高效地插入数据支持随机访问的容器。它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。

内部实现

双端队列内部实现不如vector直观。双端队列中的数据被表示为一个分段的数组,容器中的元素分段保存在一个个大小固定的数组中。此外,容器还需要维护一个用来存放这些数组首地址的索引数组。也正是因为数据存放不连续,导致deque的随机访问没有vector快。

双端队列的定义和初始化

#include<deque>  // 头文件
deque<type> deq;  // 声明一个元素类型为type的双端队列que
deque<type> deq(size);  // 声明一个类型为type、含有size个默认值初始化元素的的双端队列que
deque<type> deq(size, value);  // 声明一个元素类型为type、含有size个value元素的双端队列que
deque<type> deq(mydeque);  // deq是mydeque的一个副本
deque<type> deq(first, last);  // 使用迭代器first、last范围内的元素初始化deq

双端队列的常用方法

deq.push_back()   //在队尾插入元素
deq.push_front()   //在队首插入元素
deq.insert(deq.begin()+1,9);   //第一个元素之后插入9,后面元素后移
deq.size()   //双端队列的大小
deq.empty()   //判断是否为空
deq.begin()   //队首的指针,指向队首元素
deq.end()   //队尾元素的下一位作为指针
deq.rbegin()  //指向最后一个元素的指针
deq.rend()   //指向第一个元素的前一个位置的指针
deq.erase(point)   //删除指针piont所指的元素
deq.clear()   //删除所有元素
deq.pop_front()   //弹出队首元素
deq.pop_back()   //弹出队尾元素
#include<iostream>
#include<deque>
using namespace std;

void Print(deque<int>deq) // 打印 
{
    for(deque<int>::iterator iter=deq.begin(); iter<deq.end(); iter++)
        cout<<*iter<<"\t"; cout<<endl;
}

int main()
{
    deque<int>deq(6,2);
    for(int i=0; i<deq.size(); i++)
        cout<<deq[i]<<"\t"; cout<<endl; // 下标随机访问 

    deq.push_front(1); // 队首插入 
    deq.push_back(3);  // 队尾插入 
    Print(deq);

    deq.insert(deq.begin()+2,22); // 指定位置插入数据,后面数据依次后移 
    Print(deq);

    deq.erase(deq.begin()+2);  // 删除指定的元素 
    Print(deq);

    deq.pop_back(); deq.pop_front(); // 弹出队尾队首元素,没有返回值 
    Print(deq);

    deq.clear(); // 清楚整个队列 
    cout<<deq.empty();
 } 

 /*
运行结果:
2       2       2       2       2       2
1       2       2       2       2       2       2       3
1       2       22      2       2       2       2       2       3
1       2       2       2       2       2       2       3
2       2       2       2       2       2
1 
 */ 

感谢

  1. 《C++语言程序设计(第四版)》 清华大学出版社
  2. https://blog.csdn.net/weixin_44915226/article/details/105224513
  3. https://blog.csdn.net/hero_myself/article/details/52312644

原文链接: https://www.cnblogs.com/xxmmqg/p/12701709.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    [C++]-deque 双端队列

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/341956

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午1:21
下一篇 2023年3月2日 上午1:21

相关推荐