deque(简单介绍一下)

这篇具有很好参考价值的文章主要介绍了deque(简单介绍一下)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

deque的基本情况:

deque(简单介绍一下)

简单的来说deque是一个双头队列。且两边的尺寸可以动态收缩或者扩张。

其底层实现相当复杂,而且效率并不高。大多数时候都不会使用。

deque诞生的原因是vector和list的优缺点不可分割。

正好复习一下vector和list的优缺点。

vector的优点:支持随机访问;尾插,尾删很方便;高速缓存命中率高。

vector的缺点:不支持头插或者中间插入;扩容具备一定的性能消耗,以及空间浪费。

list的优点:任意位置插入删除数据只需要O(1)复杂度;按需申请释放空间,没有损耗。

list的缺点:不支持随机访问,高速缓存命中率低。

对比两者的优缺点,发现他们的缺点正是为了他们的优点诞生的,两者不可分割。deque就是针对两者的缺点设计出来的,所以性能被牺牲了。

deque的底层大概是这样的结构:

deque(简单介绍一下)

如何满足随机访问?

要访问的下标,减去第一个数组具有的元素个数,然后/10,就能知道在第几个空间了。%10就能知道在第几个位置。

deque的优点:

1.头插和尾插效率不错

2.支持随机访问

3.高速缓存命中率高

4.扩容代价小

deque的缺点

1.中部插入删除效率不行,(要么需要挪动数据,要么支持每个开辟的空间大小不一定相同,这样的话,中控数组还要记录每个空间有多少个元素,因为要支持随机访问)

2.虽然支持随机访问,但效率相对于vector而言还有差距。频繁随机访问时要小心。

以排序为例(测试在release下):

用deque存数据,进行排序,和vector存数据(和deque中的内容一样),进行排序。10000以内没什么区别,之后的每个数量级,deque花费的时间都是vector的2倍左右。

如果将deque的数据拷贝进vector,进行排序,排序完再将数据拷贝给deque(用assign拷贝回deque),和直接对vector中的数据排序所花费的时间,进行比较,deque花费的时间大概是vector的1.4倍左右。

所以deque适合在大量头尾存储删除数据的时候使用,比如stack和queue,栈和队列使用deque比使用vector/list更合适。文章来源地址https://www.toymoban.com/news/detail-473510.html

到了这里,关于deque(简单介绍一下)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 简单介绍一下YOLO算法发展历程

    前言: Hello大家好,我是小哥谈。 随着人工智能技术的发展,YOLO算法已经成为了一个热门话题。到目前为止,YOLO算法已经经历了多个版本的发展迭代,许多研究者对YOLO算法进行了改进和创新。为了让大家理解的更透彻,本文就由浅入深的向大家介绍YOLOv1到YOLOv5的发展历程,

    2024年02月05日
    浏览(39)
  • 简单介绍一下centos上有什么工具可以优雅的管理开机启动项

    在CentOS上,你可以使用以下工具来优雅地管理开机启动项: systemctl:systemctl 是 systemd 系统和服务管理器的主要命令。它提供了一种优雅的方式来管理启动项。你可以使用 systemctl 命令来启用、禁用、查看和管理系统服务。例如,要启用一个服务,可以使用 systemctl enable servi

    2024年02月11日
    浏览(36)
  • Linux命令查看CPU、内存、IO使用情况简单介绍

    物理cpu就是计算机上实际安装的cpu,物理cpu数就是主板上实际插入的CPU数量。 在Linux上查看/proc/cpuinfo,其中的physical id就是每个物理cpu的id,有几个不同的physical id就有几个物理cpu。 每颗物理CPU可以有1个或者多个物理内核,通常每颗物理CPU的内核数都是固定的, 单核CPU就是有

    2024年02月10日
    浏览(41)
  • 请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能

    会话管理(Session Management):Shiro能够管理用户的会话状态,包括会话的创建、维护和销毁。它支持多种会话存储方式(如内存、数据库等),并提供了会话超时、会话失效等机制,以确保会话的安全性。 跨平台集成:Shiro不仅适用于Web应用程序,还可以轻松集成到桌面应用

    2024年04月13日
    浏览(41)
  • 请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?

    请简单介绍一下Shiro框架是什么? Shiro框架是一个强大且灵活的开源安全框架,为Java应用程序提供了全面的安全解决方案。它主要用于身份验证、授权、加密和会话管理等功能,可以轻松地集成到任何Java Web应用程序中,并提供了易于理解和使用的API,使开发人员能够快速实

    2024年04月11日
    浏览(43)
  • kafka简单搭建和基本使用介绍

    使用场景 处理大规模的消息,大数据,事件采集,日志收集等,不过使用延迟消息比较麻烦对比其他的消息队列的话。高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition。每个消费组 对分区进行消费 - 可扩展性:kafka集群支

    2024年02月01日
    浏览(23)
  • 简单介绍数据结构的基本概念

    数据 数据(Data)是 客观事物的符号表示 ,是 所有能输入到计算机中并被计算机程序处理的符号的总称 。例如:整数、字符串、图形、图像、声音和动画等 数据元素 数据元素(Data Element)是 数据的基本单位 ,有时也可被称为元素、记录等。 在计算机中通常作为一个整体

    2024年02月19日
    浏览(32)
  • C++ vector模板和deque的简单应用

    目录 🤔vector模板和deque的简单介绍: 🤔vector和deque的主要不同之处: 🤔今天我们用vector模板和deque模板实现以下简单的功能: 代码实现: 🤔讲解: vector 和 deque 都是C++ STL(标准模板库)中的容器模板,用于存储和管理数据。它们都提供了可动态调整大小的数组,允许在任

    2024年02月07日
    浏览(38)
  • 【Vue】Vue的简单介绍与基本使用

    Vue是一款用于 构建用户界面 的 JavaScript 框架。 它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套 声明式的、组件化 的编程模型,帮助你高效地开发用户界面。 无论是简单还是复杂的界面,Vue 都可以胜任。 传统方式 vue方式 使用 vue 构建用户界面,解决了jQuery + 模板引擎

    2024年02月04日
    浏览(37)
  • stack 、 queue的语法使用及底层实现以及deque的介绍【C++】

    stack是一种容器适配器,具有后进先出,只能从容器的一端进行元素的插入与提取操作 队列是一种容器适配器,具有先进先出,只能从容器的一端插入元素,另一端提取元素 stack和queue在STL中并没有将其划分在容器的行列,而是称为容器适配器 因为stack和queue对其他容器的接口

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包