• [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<<"	"; cout<<endl;
    }
    
    int main()
    {
    	deque<int>deq(6,2);
    	for(int i=0; i<deq.size(); i++)
    		cout<<deq[i]<<"	"; 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
  • 相关阅读:
    ES6新特性
    浏览器兼容问题
    跨域
    箭头函数与普通函数的区别
    单页面应用
    vue试题
    Git 常用命令
    【分享代码】一个笨办法获取容器的剩余内存
    【笔记】thanos receiver的router模式
    【分享】让prometheus支持PUSH模式,可以使用remote write协议推送数据
  • 原文地址:https://www.cnblogs.com/xxmmqg/p/12701709.html
Copyright © 2020-2023  润新知