首页 > 其他分享 >cpp的序列容器极其区别

cpp的序列容器极其区别

时间:2024-12-30 14:28:24浏览次数:8  
标签:容器 deque list 序列 vector cpp 数据 指针

上一篇文章cpp的STL之vector介绍了cpp里的vector包。

除了vector容器之外,cpp的序列容器还有dequelist,这里主要介绍他们的区别。

deque双端队列

不同于vector容器,deque支持双向存取。

因此,deque容器多了push_frontpop_front两个函数,分别表示在队列的头部插入一个数据和删除一个数据

	deque<int> deq;   	 //定义双端队列
	deq.push_front(0);   //在队列的头部插入一个数据0
	deq.pop_front();     //在队列的头部删除一个数据

其次,deque容器不允许容量查询,即不能使用capacity()函数

list链表

vector容器由于内存是连续的,因此频繁的增加、删除数据时会导致速度非常慢。
如果分配的连续内存不够的话,新增一个元素,操作系统需要重新分配内存,然后拷贝复制之前的数据到新分配的内存里。
为了解决这种需要频繁增加、删除数据的场景,链表list应运而生。

链表listvector容器的存储方式非常不一样。
链表list每个结点有三个结构:前向指针、具体数据和后向指针,前向指针和后向指针分别指向上一个数据和下一个数据的地址。
这种结构表示list容器不需要连续的内存,因此新增或者删除数据只需要修改对应节点前向指针、后向指针就可以了。

同样的,这种双链表的结构也导致了list容器随机访问效率不如vector容器。
vector容器取第n个数据,只需要使用vec[n]数据就可以取到,而list不支持改方法

标签:容器,deque,list,序列,vector,cpp,数据,指针
From: https://blog.csdn.net/qq_42752524/article/details/144824010

相关文章

  • 开放型几何形状和容器中的静压液位测量——填充高度的计算
    由于其简单的安装方式和易用性,到目前为止,通过静压式液位传感器来进行液位测量是液位测量应用中最常用的液位测量应用解决方案。然而,当使用静压式液位传感器来测量填充液体液位变化时,必须要根据静压测量值对容器的填充高度进行正确计算,以获得准确的液位测量值。所以,如何根据静压......
  • java容器及其并发容器的演进
    staticList<String>arrayList=newArrayList();static{for(inti=0;i<10000;i++){arrayList.add("编号:"+i);}}//会出现多线线程处理同一个元素for(inti=0;i<10;i++){......
  • 【html】通用布局模式,让容器充满父元素,且center部分始终充满剩余空间,可无限嵌套
    源码采用vue3写法实现:Panel.vue<!--专用于布局的面板,可以无限嵌套,核心思想是保证center部分充满整个剩余空间--><template> <divclass="container"> <divclass="top"> <slotname="top"/> </div> <divclass="middle&q......
  • UE4.27, 揣摩源码, 序列化 (四) 应用
    4.runtime-UObject正反序列化4.1UObject序列化//toolload FAssetToolsModule&AssetToolsModule=FModuleManager::Get().LoadModuleChecked<FAssetToolsModule>("AssetTools"); //pathsolve FStringAssetName,Pack......
  • UE4.27, 揣摩源码, 序列化 (三) FLinkerLoad, FLinkerSave
    3.  FLinkerLoad,FLinkerSave分别是UObject的反序列化和序列化的内核3.0.UPackage与UObjectUObject因为涉及与其他UObject的复杂引用关系,如果我们客制化地单独正反序列化每一个UObject,我们会在反序列化的时候惊觉这是繁琐而不可能的。为了满足UObject......
  • JSON字符串反序列化 动态泛型
    需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成JSON字符串,然后JSON反序列化成对象,然后反射调用目标方法时这样的:CommandRespsendXXX(BaseCommandApiDTO<XXX>baseCommandApiDTO);方式一:FastJsonClassmainBody=Class.forName(entity.ge......
  • 头歌实训数据结构与算法-二叉树及其应用(第7关:由前序和中序遍历序列构造二叉树)
    任务描述本关任务要求采用前序遍历序列和中序遍历序列构造二叉树。相关知识给定一棵二叉树的前序遍历序列和中序遍历序列可以构造出这棵二叉树。例如前序序列是ABDECFG,中序序列是DBEAFCG,那么这颗二叉树的结构如图1所示。树结点结构定义为:structBTNode{    c......
  • Adaboost集成学习 | Matlab实现基于ELM-Adaboost极限学习机结合Adaboost集成学习时间
    目录效果一览基本介绍模型设计程序设计参考资料效果一览基本介绍基于ELM-Adaboost极限学习机结合Adaboost集成学习时间序列预测(股票价格预测)单变量时间序列单步预测。ELM(ExtremeLearningMachine,极限学习机)和AdaBoost(AdaptiveBoosting,自适应提升)都......
  • 基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印) PSO优化过程:  PSO优化前后,模型训练对比:    数据预测对比:    误差回归对比:   2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)LR......
  • cpp智能指针
      普通指针的不足new和new[]的内存需要用delete和deletel]释放。程序员的主观失误,忘了或漏了释放。程序员也不确定何时释放。普通指针的释放类内的指针,在析构函数中释放。C++内置数据类型,如何释放?new出来的类,本身如何释放?C++11新增三个智能指针类型uniqu......