【C++】deque的介绍

在这里插入图片描述

一、介绍

在C++中,deque(双端队列)是一个序列容器,它提供了双端队列数据结构的功能

deque文档

在常规队列中,元素从后面添加并从前面移除
然而,在deque中,我们可以从前后两端插入和移除元素

对于vector容器来说,push_front的效率很低,但是对于deque来说,push_frontpush_back的插入效率为O(1)

  • 与vector比较,头插效率高,不需要搬移元素
  • 与list比较,空间利用率比较高

二、创建和初始化

deque的初始化和vector的初始化是类似的

deque<int>dq(10);
deque<int> dq {1, 2, 3, 4, 5};

三、常用方法

以下是一些常用的deque方法:

  • push_front(g):在deque的前面添加一个元素g
  • push_back(g):在deque的后面添加一个元素g
  • pop_front():移除deque前面的元素
  • pop_back():移除deque后面的元素
  • front():返回第一个元素
  • back():返回最后一个元素
  • begin():返回指向第一个元素的迭代器
  • end():返回指向最后一个元素之后位置的迭代器
  • rbegin():返回指向最后一个元素的反向迭代器
  • rend():返回指向第一个元素之前位置的反向迭代器
  • clear():移除所有元素
  • size():返回元素数
  • empty():如果deque为空则返回真

四、deque的底层以及迭代器

在C++ STL中,deque(双端队列)是通过数据数组或指向内存块的指针数组实现的,而不是通过链表。根据存储需求,块的数量和指针数组的大小会动态波动。这些内存块包含了相邻位置的元素

  • deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维
    数组

在这里插入图片描述

  • 双端队列底层是一段假象的连续空间,实际是分段连续的,为了维护其“整体连续”以及随机访问的假象,落
    在了deque的迭代器身上

五、deque的缺点以及优点

优点

  • 与vector比较,头插效率高,不需要搬移元素
  • 与list比较,空间利用率比较高,底层是一段连续的空间

缺点

  • 不适合遍历,遍历的时候,deque的迭代器需要不断地去检查是否已经到达某段小空间的边界
    导致效率低下
    在这里插入图片描述
dequeC++标准库中的容器,它是一种双端队列(double-ended queue),可以在两端进行插入和删除操作。在引用中的代码示例中,通过包含头文件<iostream>和<deque>,使用命名空间std来定义了一个名为test的函数。在test函数中,创建了一个deque对象d,并通过d.push_back()函数将元素添加到队列的末尾。然后,使用deque对象d的迭代器构造了一个新的deque对象d2。接着,通过d2.push_back()将10000作为新元素添加到了d2的末尾。最后,通过d.swap(d2)交换了两个deque对象的内容,并通过d.back()获取了d队列中最后一个元素的值,即10000。输出结果为10000。 在引用中的代码示例中,使用了deque对象d的成员函数front()和back()分别返回队列的第一个元素和最后一个元素的值。另外,deque对象d的成员函数insert()可以在指定位置插入一个或多个元素,而erase()可以删除指定位置的一个或多个元素。 应用sort算法对deque进行排序时,可以通过包含头文件<algorithm>,定义一个回调函数compare,该函数用于自定义排序规则,可以根据需要按升序或降序排序。然后,使用sort函数对deque进行排序,并通过printDeque函数输出排序后的deque元素。 除此之外,deque还有一些其他函数,如swap()可以交换两个deque对象的内容,assign()可以将一个给定值赋值给deque中的指定位置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [C++ deque](https://blog.csdn.net/weixin_59141600/article/details/126898400)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [C++ deque用法详解](https://blog.csdn.net/qq_39779233/article/details/107983598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值