C++学习笔记——C++ deque和vector的区别

C++中的std::deque(双端队列)和std::vector(向量)是两种不同的容器类型,它们有以下区别:

  • 内部实现方式不同:std::deque使用了一种双端队列的数据结构,它由多个块(chunks)组成,每个块内部存储一部分元素。而std::vector则使用了连续的内存块来存储元素。

  • 随机访问性能不同:由于std::vector的元素在内存中是连续存储的,因此它支持高效的随机访问,可以通过索引直接访问任意位置的元素。而std::deque虽然也支持随机访问,但由于元素分布在多个块中,访问不同位置的元素可能需要更多的指针操作,因此相对于std::vector,其随机访问的性能稍差一些。

  • 插入和删除操作性能不同:std::deque在两端进行插入和删除操作的性能较好,因为它可以在常数时间内在两端进行操作。而std::vector在尾部进行插入和删除操作的性能也很好,但在中间或头部进行插入和删除操作时,需要移动后续元素,因此性能较差。

  • 内存管理方式不同:std::deque相对于std::vector具有更高的内存开销,因为它需要为每个块分配额外的内存空间。而std::vector则在内存中分配一块连续的内存来存储元素,可以更有效地利用内存。

综上所述,选择使用std::deque还是std::vector取决于具体的使用场景和需求。如果需要频繁在两端进行插入和删除操作,或者不需要频繁的随机访问,std::deque可能是一个更好的选择。如果需要高效的随机访问和在尾部进行插入和删除操作,std::vector可能更适合。

deque示例代码

#include <iostream>
#include <deque>int main()
{std::deque<int> myDeque;// 在尾部插入元素myDeque.push_back(10);myDeque.push_back(20);myDeque.push_back(30);std::cout << "在尾部插入元素 双端队列中的元素:";for (size_t i = 0; i < myDeque.size(); i++){std::cout << myDeque[i] << " ";}std::cout << std::endl;// 在头部插入元素myDeque.push_front(5);myDeque.push_front(15);// 使用索引访问元素std::cout << "在头部插入元素 双端队列中的元素:";for (size_t i = 0; i < myDeque.size(); i++){std::cout << myDeque[i] << " ";}std::cout << std::endl;// 从尾部删除元素myDeque.pop_back();std::cout << "从尾部删除元素后 双端队列中的元素:";for (size_t i = 0; i < myDeque.size(); i++){std::cout << myDeque[i] << " ";}std::cout << std::endl;// 从头部删除元素myDeque.pop_front();std::cout << "从头部删除元素后 双端队列中的元素:";for (size_t i = 0; i < myDeque.size(); i++){std::cout << myDeque[i] << " ";}std::cout << std::endl;// 使用迭代器访问元素std::cout << "删除元素后的双端队列中的元素:";for (auto it = myDeque.begin(); it != myDeque.end(); ++it){std::cout << *it << " ";}std::cout << std::endl;// 删除特定index的数据,比如第三个的myDeque.erase(myDeque.begin() + 3-1);std::cout << "删除特定index的数据,比如第三个的 双端队列中的元素:";for (size_t i = 0; i < myDeque.size(); i++){std::cout << myDeque[i] << " ";}std::cout << std::endl;return 0;
}

在这里插入图片描述

vector示例代码

#include <iostream>
#include <vector>int main() {std::vector<int> myVector;// 在尾部插入元素myVector.push_back(10);myVector.push_back(20);myVector.push_back(30);// 使用索引访问元素std::cout << "向量中的元素:";for (size_t i = 0; i < myVector.size(); i++) {std::cout << myVector[i] << " ";}std::cout << std::endl;// 从尾部删除元素myVector.pop_back();// 使用迭代器访问元素std::cout << "删除元素后的向量中的元素:";for (auto it = myVector.begin(); it != myVector.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/159878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】用 dict 实现一个简单的 json 数据库

废话不看&#xff1a; 最近写了一个小项目&#xff0c;基本逻辑是通过定时任务轮询 API&#xff0c;检测 API 状态变化并执行对应的操作。该 API 一共有 3 种状态&#xff0c;假设每种状态的值分别为 1、2、3&#xff0c;在状态 2 的时候需要调用一次处理方法。 这里的问题是状…

JavaScript面试经,offer拿到手软

文章来源于公众号&#xff1a;猴哥说前端 作者&#xff1a;monkeysoft 本文给大家分享一些 JavaScript 面试经验&#xff0c;在这金九银十的招聘季&#xff0c;希望大家都能找到满意的工作。 JavaScript的数据类型都有什么&#xff1f; 基本数据类型&#xff1a;String,Boolea…

word2vec的算法原理(不用开源包,python实现)

看了很多关于word2vec的算法原理的介绍文章&#xff0c;看明白了&#xff0c;但依然有点不深刻。 以下是python直接实现的word2vec的算法&#xff0c;简单明了&#xff0c;读完就懂了 import numpy as npdef tokenize(text):return text.lower().split()def generate_word_pa…

【操作系统】文件系统的实现

文章目录 文件系统的层次结构文件系统的实现目录实现线性列表哈希表 文件的实现连续分配链接分配索引分配 文件存储空间管理空闲表法与空闲链表法成组链接法位示图法 文件系统的层次结构 文件系统从上往下分为了五层&#xff0c;分别是用户调用接口、文件目录系统、存取控制模…

SWT/Jface(1): 表格的创建和渲染

前言 使用JFace创建表格还是比较方便的, 如果仅仅是创建空表格的话, 以下2步即可完成: 创建TableViewer对象, 指定样式, 比如是否支持多行选择, 有无边框, 是否支持滚动条等创建TableColumn对象: 包括列展示名称, 宽度和样式等, 最终绑定到table对象 实例 创建表格 //注意…

c语言中使用openssl对rsa私钥解密

单次加密数据的最大长度&#xff08;block_len&#xff09;&#xff0c;由RSA秘钥模长RSA_size()和填充模式有关 填充模式&#xff1a;RSA_PKCS1_PADDING&#xff0c; block_lenRSA_size() - 11填充模式&#xff1a;RSA_PKCS1_OAEP_PADDING&#xff0c;block_lenRSA_size() - 4…

设计模式-学习总结

学习总结 本文仅供自我学习使用 我是一个小白设计模式一.创建型模式1.单例模式(1).饿汉式(2).懒汉式&#xff0c;双检锁(3).静态内部类(4).枚举 2.原型模式3.工厂模式(1).简单工厂模式 4.抽象工厂模式5.建造者模式 二.结构型模式6.适配器模式7.组合模式8.装饰器模式9.外观模式1…

Spring国际化笔记整理

resources/message中添加hello.properties配置user.nameUserName {0}resources/message中添加hello_zh_CN.properties配置user.name用户名 {0}添加单元测试Slf4j public class MessageSourceTest {Testpublic void message(){Locale locale LocaleContextHolder.getLocale();S…

【AI】行业消息精选和分析(11月22日)

今日动态 &#x1f453; Video-LLaVA&#xff1a;视觉语言模型革新&#xff1a; - 图像和视频信息转换为文字格式。 - 多模态理解能力&#xff0c;适用于自动问答系统等。 &#x1f4c8; 百度文心一言用户数达7000万&#xff1a; &#x1f50a; RealtimeTTS&#xff1a;实时文本…

shell之read命令

shell之read命令 简介例子 简介 Linux的read命令用于从标准输入读取数据。它通常用于在shell脚本中读取用户的输入并将其分配给变量。 read命令的语法如下&#xff1a; read [-options] [variable]read命令的选项包括&#xff1a; -d&#xff1a;指定输入行的结束标志。 -p…

SpringBoot : ch06 整合 web (一)

前言 SpringBoot作为一款优秀的框架&#xff0c;不仅提供了快速开发的能力&#xff0c;同时也提供了丰富的文档和示例&#xff0c;让开发者更加容易上手。在本博客中&#xff0c;我们将介绍如何使用SpringBoot来整合Web应用程序的相关技术&#xff0c;并通过实例代码来演示如何…

独立按键程序

/*----------------------------------------------- 内容&#xff1a;切换到独立按键模式&#xff0c;通过按键在数码管显示对应的数字 ------------------------------------------------*/ #include<reg52.h> //包含头文件&#xff0c;一般情况不需要改动&#xff…

《微信小程序案例大全》大学生期末大作业可以直接使用!!

前言 在大学生活中&#xff0c;期末大作业是锻炼和展示自己所学知识的重要时刻。微信小程序作为一种快速、便捷的应用开发方式&#xff0c;成为了大学生开发实践的热门选择。本文将为大家推荐一系列可以直接使用的微信小程序案例&#xff0c;包括仿真社交、图书管理、学习工具…

电子元器件

目录 前言一、电阻 前言 本篇只介绍低功率元器件&#xff0c;电源等大功率元器件不做介绍 一、电阻

接口自动化测试实战经验分享,测试用例也能自动生成

作为测试&#xff0c;你可能会对以下场景感到似曾相识&#xff1a;开发改好的 BUG 反复横跳&#xff1b;版本兼容逻辑多&#xff0c;修复一个 BUG 触发了更多 BUG&#xff1b;上线时系统监控毫无异常&#xff0c;过段时间用户投诉某个页面无数据&#xff1b;改动祖传代码时如履…

CentOS 7 使用pugixml 库

安装 pugixml Git下载地址&#xff1a;https://github.com/zeux/pugixml 步骤1&#xff1a;首先&#xff0c;你需要下载pugixml 的源代码。你可以从Github或者源代码官方网站下载。并上传至/usr/local/source_code/ 步骤2&#xff1a;下载完成后&#xff0c;需要将源代码解压…

利用QRCode.js生成动态二维码页面

文章目录 QRCode.js简介HTML结构JavaScript生成动态二维码拓展功能1. 联系信息二维码2. Wi-Fi网络信息二维码 总结 &#x1f389;利用QRCode.js生成动态二维码页面 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏…

mysql 存储引擎ROWS与实际行数不一致

引言 在使用 MySQL 数据库时&#xff0c;我们经常会用到 SHOW TABLE STATUS 命令来获取表的统计信息&#xff0c;其中包括行数&#xff08;rows&#xff09;的估计值。然而&#xff0c;有时候我们会发现这个估计值与实际的行数并不一致。本文将探讨这个问题&#xff0c;并提供…

介绍下官网Redis编程模式

缘由 以前只是接触过redis&#xff0c;只有最近才比较深入研究了下&#xff0c;觉得有几个重要的概念可以积累出来&#xff0c;以利于帮助理解redis &#x1f603; 本文仅简述重点概念&#xff0c;和列举相关参考文档链接&#xff0c;但参见文档多来自redis官网&#xff0c;足…

微信小程序开发者工具] ? Enable IDE Service (y/N) ESC[27DESC[27C

在HBuilder运行微信小程序开发者工具报错 如何解决 打开微信小程序开发者工具打开设置--->安全设置--->服务器端口选择打开就可以啦