首页 > 其他分享 >【STL】Deque - 双向队列

【STL】Deque - 双向队列

时间:2022-09-19 23:11:41浏览次数:67  
标签:Deque iterator deque STL 元素 队列 双向

Deque简介

Deque是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。允许快速地访地随机访问,但是和vector这种将所有对象保存在一块连续的内存块不同,Deque是采用多个连续的存储块,并且在一个映射结构中保存对这些块及顺序的跟踪。向deque两端添加或删除元素的开销很小。它不需要重新分配空间,所以向末端增加元素相比vector更有效。

Deque更像是对vector和list优缺点的结合,是处于两者之间的一种容器。

特点:

(1)方便随机访问,支持[]操作符和deque.at();

(2)可以在内部进行插入和删除操作;

(3)可以在两端进行push、pop;

(4)相对于vector占用更多的内存

Deque和Vector很像,Deque允许在容器头部快速的插入和删除,就像在尾部一样

Deque的类方法

1.Constrcutors:构造一个新双向队列

deque();      // 创建一个空的双向队列
deque(size_type size);   //创建一个大小为size的双向队列
deque(size_type num,const TYPE &val);   // 放置num个val拷贝到队列中
deque(const deque &from);           // 从from创建一个与from内容一直的双向队列
deque(input_iterator start,input_iterator end);   // 从start到end创建一个队列,保存从start到end的元素

2.Operators:比较和赋值双向队列

// 访问指定位置的元素
operators[]      

3.assign():设置双向队列的值

// start和end指示的范围为双向队列赋值
void assign(input_iterator start,input_iterator end);
// 设置成num个val
void assign(Size num,const TYPE &val);

4.at():返回制定的元素

5.back():返回最后一个元素

6.begin() : 返回第一个元素的迭代器

// 返回一个迭代器,指向双向队列的第一个元素
interator begin();     

7.clear():删除所有元素

8.empty():判断deque是否为空

9.end():返回指向尾部的迭代器

10.erase():删除一个元素

// 删除pos的位置上的元素
iterator erase(iterator pos);     

// 删除start和end之间所有的元素
iterator erase(iterator start,iterator end);

11.front():返回第一个元素的引用

12.get_allocator(): 返回双向队列的配置器

13.insert():插入一个元素到双向队列中

// pos前插入num个val值
iterator insert(iterator pos,size_type num,const TYPE &val);

// 插入从start带end范围内的元素到pos前面
void insert(iterator pos,input_iteraotr start,input_iterator end);

14.max_size():返回双向队列能容纳的最大元素个数

15.pop_back():移除尾部的一个元素

16.pop_front():移除头部的一个元素

17.push_back():在尾部加入一个元素

18.push_front():在头部加入一个元素

19.rbegin():返回指向尾部的逆向迭代器

20.rend():返回指向头部的逆向迭代器

21.resize():改变双向队列的大小

22.size():返回双向队列中元素的个数

23.swap():和另一个双向队列交换元素

// 交换target和现双向队列中元素
void swap(deque &target);







参考文章:C++_标准模板库(STL) - Deque

标签:Deque,iterator,deque,STL,元素,队列,双向
From: https://www.cnblogs.com/Wangzx000/p/16709438.html

相关文章

  • STL常用基础模板
    STL模板:堆头文件:#include<queue>大根堆:priority_queue<int>q;小根堆:priority_queue<int,vector<int>,greater<int>>q;操作:q.top()//取得堆顶元素,并不会弹出q.pop......
  • 如此狂妄,自称高性能队列的Disruptor有啥来头?
    并发框架Disruptor1.Disruptor概述1.1背景​ Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O......
  • leetcode 622.设计循环队列
    622.设计循环队列难度中等402  设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它......
  • Go-数组模拟队列(环形列表)
      复制packagemainimport( "errors" "fmt" "os")typeCircleQueuestruct{ maxSizeint array[5]int headint tailint}//添加队列fu......
  • 数据结构一: golang 单向队列
    队列是什么,如何理解队列?队列一般称queue,是一个有序列表队列一般的原则为:先进先出【谁先来,谁先走】队列一般的场景可以想象:银行取现排队,移动营业厅排队,买咖啡排队等例......
  • ARM仿真下载调试器 SWD编程器 Jlink OB下载器 超STLINK 代替V8
    传统JLINK体积大、引脚多,而且我们用的非官方版本,经常掉固件,诸多问题一直困扰着我,经过一番折腾,终于找到了正解:jlinkob,一个只有三条线的调试器,除了不能检测目标板电压(也没啥......
  • 用 Redis 做一个可靠的延迟队列
    我们先看看以下业务场景:当订单一直处于未支付状态时,如何及时的关闭订单,并退还库存?新创建店铺,N天内没有上传商品,系统如何知道该信息,并发送激活短信?上述场景最简单直接的......
  • .NET 处理类(批量任务队列,List分页处理,配置文件管理)
    ///<summary>///任务队列接口///</summary>publicinterfaceITaskQueue<T>{///<summary>///增加一个对象//......
  • ThreadPoolExecutor 中 BlockingQueue 队列中的任务以及占用的内存
    问题ThreadPoolExecutor中BlockingQueue队列中的任务是什么?一个任务占用的内存大小?分析参考4种方法教你如何查看java对象所占内存大小,编写如下代码进行测试。......
  • redis队列 Redis存储/取尽值,获取最新值
    /***取尽存储的值,获取最新值**@paramkey*@return*/@OverridepublicStringpopData(Stringkey){List<String>......