序列式容器:vector

STL:序列式容器vector总结 说起数组我们都不陌生,但在C++中,除了数组还多了一个“新朋友”那就是vector。其实vector本质上与array的数据安排以及操作方式也其为相似。它俩唯一的差别就是空间灵活性。无论在C语言还是C++中,array的空间一旦申请完成就不能进行更改,如果需要更大空间来存储数据,便得重新申请一个新的数组并将原来的数值拷贝过去,然后再将原来数组释放,而这一切都需要用户自己完成。而vector不同的是, 阅读详情
vector:连续的线性空间,与array唯一的区别在于其空间的动态配置。
其有自己的迭代器,由于它空间连续,所以不论其元素型别为何,普通指针可以作为vector的迭代器,如下:
typedef T value_type;
typedef value_type* iterator;
typedef size_t size_type;
typedef value_type& reference;
实现:
  • 私有成员:
iterator start;     //目前使用空间的头
iterator finish;    //目前使用空间的尾
iterator end _of_storage;    //表示目前可用空间的尾
  • 构造
vector():全0;   //默认
vector(size_type n,const T& value) ;   //初始化n个空间为value;
vector(size_type n);      //初始化n个空间值为默认   
  • 基本操作                                                                                                                                                                                                    
begin():return start;
end():return finish;
size():return end()-begin();
capacity():return end_of_storage-begin();
empty():return end()==begin();
ref operator[](n):return (*(begin()+n)); 
front():return *begin();
back():return *(end()-1);
  • 尾插
void push_back(const T& x):
  (1)//若备用空间足够
     if:finsh!=end_of_storage
     //直接插构造,finish++
  (2)//不足
     else:
     调用insert_aux(iterator position,consy T& x)函数;    
  • insert_aux(iterator position,consy T& x)插入操作:
    (1)//若备用空间足够
     if:finsh!=end_of_storage
     //直接插构造,finish++
    (2)//不足
     else:
      配置新空间:
      const size_type len=old_size!=0?2*old_size:1;
      new_start=allocate(len);
      //若原大小为0,则配置1个元素大小;
      //若不为0,则配置原大小两倍;
      //将原空间内容拷贝到新空间,并插入新元素;
      //旧空间销毁释放,调整迭代器指向新空间,调整水位.
  • 尾删
void pop_back():--finish,销毁最后一个元素
  • resize()函数
resize(newsize,value):
    (1)newsize<size:
      调用erase(begin()+newsize,end())  //删除一段区间
    (2)else
      调用insert(iterator position,size_type n,const T&x )函数;
  • 删除函数
iterator erase(iterator position):     //删除指定位置一个,返回此指定删除位置迭代器
   (1)if不是最后一个元素,将position+1-->finish元素向前移动到position位置;
   (2)  position位置元素被覆盖删除;
    (3)--finish,调整finish ;
    (4)销毁先前最后一个元素,返回position;
//注意:此时position地址没变,但其指向内容为被删除元素的下一个

iterator erase(iterator first,   last);  //删除一段区间,返回first
   (1)if不是最后一个元素,将last-->finish元素向前移动到first位置;
   (2)区间位置元素被覆盖删除;
    (3)将后面last-first元素删除销毁;
    (4)finish=finish-(last-first),调整finish ;
    ()返回first.
//注意相同
  • insert函数:
insert(iterator position,size_type n,const T& x);   //指定位置插入n个值为x的元素
    (1)if(备用空间>=新增插入元素)
        a.插入点之后元素个数>新增元素:
        b.插入点元素之后个数<=新增元素:
    (2)else:备用空间<新增插入元素
        a.决定新长度:旧长度两倍或新增原素个数(取大的)
          len=old_size+max(old_size,n);
        b.配置新空间:
          将旧空间插入点之前元素复制新空间;
          将新增N个元素插入新空间;
          旧空间插入点之后元素复制到新空间;
        c.释放旧空间,调整迭代器,水位
  • clear函数
void clear():erase(begin(),end());  //使size()==0,capacity()不变

优缺点:可用下标访问,存取访问方便快捷;不适用与频繁的插入,删除元素,需要移动其以后所有元素,所以vector没有头插头删操作,效率太慢,但其又适用尾插尾删(后面没有元素移动代价)



C++ STL序列式容器深度解析:vector、deque、list原理与实战指南 在C++编程中,数据结构是构建高效程序的基础。数组作为最基本的数据结构,虽然简单直接,但存在固定大小、插入删除效率低等局限性。为了解决这些问题,C++标准模板库(STL)提供了容器这一抽象层,实现了算法与数据结构的分离。STL容器基于泛型编程思想,通过模板实现类型无关性,使得同一套算法可以应用于不同数据类型。其核心价值在于提升开发效率、保证性能优化并减少内存管理错误。在实际工程中,容器的选择直接影响程序性能,例如需要频繁随机访问时使用vector,需要双端操作时使用deque,需要任意位置插入删除时使用li 阅读详情

相关推荐

MuMu模拟器过检测实战:从硬件伪装到API欺骗的完整避坑指南

本文详细介绍了MuMu模拟器过检测的实战技术,从硬件伪装到API欺骗的全方位解决方案。通过修改CPU/GPU信息、内存分布、系统属性和行为模拟等关键技术,帮助用户有效绕过现代应用的模拟器检测机制,提升模拟器的隐蔽性和稳定性。

xxx12的博客 1393

C++STL——顺序容器

参考《C++ prime》第五版

m0_63997099的博客 2354

Dify+firecrawl:一个超好用的网页转Markdown API,打造你的第一个能检索爬虫RAG知识库的聊天机器人

Firecrawl是一个超简单的API服务——你扔给它一个URL,它就能把整个网站(包括子页面!)的内容自动抓下来,并且转换成干净、易读的Markdown格式。不用配置网站的站点地图,不用写爬虫规则,API调一下,数据直接到手。接下来我们一起本地部署吧!

2501_91673550的博客 2991

STL学习记录(1) - 顺序式容器

文章目录0. 序1. list2. vector3. array4. forward_list5. dequedeque如何模拟连续?6. queue7. stack 0. 序 学习STL源码做的笔记,主线是侯捷老师的《STL源码剖析》。 本文中部分图片来自侯捷老师的PPT。 1. list list是一个双向链表。 list容器的iterator也是一个类,需要重载*操作符、两个++的运算。因为list所占的内存空间不一定是连续的,可能是跳跃的。 iterator中至少有5个typedef(不只是list

行仔ovo的博客 256

YOLOv8中Anchor-Based、Anchor-Free及样本分配策略

本文主要介绍yolov8中的anchor机制与样本分配策略的静态策略和动态策略

qq_52889317的博客 2211

保姆级教程:用CameraX API快速搞定Android多摄像头切换与预览(附避坑指南)

本文提供了一份详细的CameraX API教程,帮助开发者快速实现Android多摄像头切换与预览功能。通过简化API设计和生命周期感知能力,CameraX大幅降低了开发复杂度,同时解决了多摄像头兼容性、预览优化等常见问题。文章包含完整代码示例和实战避坑指南,特别适合需要高效集成相机功能的Android开发者。

weixin_42699679的博客 166

C++常用容器

常用的STL容器 容器就是类模板,大致分为顺序容器,适配器容器和关联容器 顺序容器(vector,string deque,list) 关联容器(set(集合容器)/multlist(多重集合容器)),(map(映射容器)/multimap(多重映射容器)) 适配器容器(stack(栈容器)/queue(队列容器)/priority_queue(优先队列容器)) 一,顺序容器 vector(向量容器) 优点:可以从末尾快速地插入与删除元素,快速的随机访问元素 缺点:在序列中间插入,删除元素较慢,因为需

qq_45524532的博客 1万+

FISCO BCOS(八)——— 一键部署 WeBase

环境 版本 Java Oracle JDK 8 至 14 MySQL MySQL-5.6及以上 Python Python3.6及以上 PyMySQL 1、获取部署安装包: wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.4/webase-deploy.zip 2、解压安装包: unzip webase-deploy.zip 3、进入目录: c...

林中有神君 3607

C++ 顺序容器基础知识总结

0.前言 本文简单地总结了STL的顺序容器的知识点。文中并不涉及具体的实现技巧,对于细节的东西也没有提及。一来不同的标准库有着不同的实现,二来关于具体实现《STL源码剖析》已经展示得全面细致。所以本文仅仅是对容器基础知识的归纳。至于容器提供的接口与使用实例,建议查取官方文档。文章难免有错漏,希望指出。 1.容器概论 容器,置物之所也。像桶可装水,碗可盛汤,C++的容器,可以存储对象。容器有多种,用...

weixin_33701294的博客 222

YOLOv8 模型进化全解析:百种创新模块集成方法与实战部署指南(附资料链接)

动态网络 | DeformableConv/DynamicHead| +2.8% || 轻量化卷积 | GhostConv/MobileConv | +1.2% || 多尺度融合 | AFPN/ASFF | +3.5% || 注意力机制 | CA/EMA/SimAM | +1.8-4.2% |

FJN110的博客 111

【图像拼接(Image Stitching)】关于【图像拼接论文精读】专栏的相关说明,包含专栏使用方法、阅读顺序、创新思路、文章汇总、源码汇总、数据集汇总等。总之,【图像拼接论文相关】看这一篇就够了

为什么会有这篇文章?因为专栏简介里写不下太多东西,只能通过这篇文章和大家交流,算是一个专栏阅读指南吧。说点心里话本来吧,我只想用优快云来记录自己学习【图像拼接】领域论文的过程,对每篇文章有个细致的理解,方便自己反复查阅。设置为付费也是因为涉及论文和本人其他项目需要,防止查重和其他问题,所以价格最开始设置的是专栏付费价格里最高的。起初,确实没有人看,一切也都平淡地度过着。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 4万+

【C++】STL常用容器总结之二:顺序容器

3、顺序容器所谓序列式容器,其中的元素都可序(ordered),但未必有序(sorted)。array为C++语言内置的序列容器,STL另外提供vector、list、deque、stack、queue等等顺序式容器。它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价。 标准库还提供了三种容器适配器(adapter),所谓适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口

长相忆兮长相忆的专栏 1330

AI智能体实战:从LangChain到多智能体协作的自动化新范式

在人工智能技术快速发展的今天,大语言模型(LLM)已成为推动自动化变革的核心驱动力。其原理在于通过深度学习海量文本数据,使模型能够理解、生成自然语言并执行推理任务。这一技术进步催生了AI智能体(AI Agent)这一新兴概念,它赋予自动化系统自主决策和动态规划能力,从而突破了传统脚本和RPA工具在固定流程上的局限。从技术价值看,AI智能体框架通过封装LLM调用、工具集成与流程编排,显著降低了构建复杂人机协同应用的开发门槛。在实际应用场景中,智能体尤其擅长处理信息调研、内容创作辅助、数据分析等需要处理非结构化

weixin_33730836的博客 773

C++ STL容器:序列式容器-数组string,vector,array,bitset

CC++ STL(Standard Template Library,标准模板库)在C++编程中的重要性不容忽视,STL提供了一系列容器、迭代器、算法和函数对象,这些组件极大地提高了C++程序的开发效率和代码质量。STL 容器 分为 2 大类 , 分别是“序列式容器” 和“关联式容器 ”。本文介绍的是序列式容器-数组string,vector,array,bitset。

weixin_45068267的博客 1088

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

源码剖析:STL中序列式容器之vector

本文主要讲解STL中的容器实现,重点对比序列式容器和关联式容器的区别,并详细分析vector容器的实现。序列式容器按元素添加顺序组织数据,支持快速随机访问;关联式容器通过键值对存储,使用平衡树或哈希表组织,查找效率更高。文章深入剖析vector的数据结构、构造函数、析构函数实现,以及常用操作如push_back、pop_back、insert、erase等的源码实现。vector采用线性连续空间结构,使用三个迭代器(start、finish、end_of_storage)分别标记已使用空间头尾和总空间尾,能

WildPointer的博客 1282

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【STL】序列式容器:vector

先简单的说下序列式容器,该类容器是有序群集,其中每个元素均有固定的位置——取决于插入时间和地点,和元素值无关。换言之,就是容器中的元素位置取决于你插入该元素的时间或(和)往哪个位置插入。比如有的容器提供尾端追加元素函数,有的容器还提供向某位置插入某元素。STL 提供三个定义好的序列式容器:vector,deque,list。这里学习vector。 vector 将其元素置于一个动态数组中加以管理

wenqian 'blog 7202

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

STL:序列式容器vector笔记

vector的构造, C++98中的四种构造 default (1) explicit vector (const allocator_type& alloc = allocator_type()); fill (2) explicit vector (size_type n, const value_type& val = va...

编程爱好者的博客 325

C++ 序列式容器深度解析:vector、string、deque 与 list

本文解析了 vector、string、deque、list 四种序列式容器。它们以插入顺序组织元素,底层分别基于动态数组、字符数组、分段内存、双向链表,各有独特性能:vector 适合随机访问和尾部操作,string 专注字符串处理,deque 擅长双端操作,list 灵活应对任意位置增删。了解这些特性可助开发者按需选择。

qq_16759367的博客 1313

chapter4 序列式容器:vector

目录1 前言2 vector2.1 与array的区别2.2 vector的迭代器2.3 vector的数据结构2.4 vector的构造与内存管理2.4.1 定义data_allocator进行空间配置2.4.2 提供允许指定空间大小及初值的constructor2.4.3 push_back()2.5 vector的元素操作:pop_back,erase,clear,insert2.5.1 pop_back2.5.2 erase2.5.3 clear2.5.4 insert 1 前言 序列式容器:其中

weixin_42323999的博客 190

【C++】:C++中的STL序列式容器vector源码剖析

public://vector的迭代器是原生指标...//等同于int* ivite;//等同于Shape* svite;

优快云官方认证C/C++研发领域优质创作者 优快云官方2023年成都赛道Top3 第16届蓝桥杯C/C++软件赛四川赛区二等奖 带你玩转C/C++ 数据结构与算法 Linux系统编程/Linux网络编程 MySQL数据库 软件测试开发 1809

STL源码剖析(2):序列式容器之基础:vector

第一次写STL的容器,先来介绍一下序列式容器吧。 序列式容器,其中的元素都可序,但未必有序,C++语言本身提供了一个序列式容器array,STL另外再提供vector(数组),list(双向链表),deque(双端队列),stack(栈),queue(队列),slist(单链表),priority-queue(优先队列),heap(堆)等等序列式容器,其中stack,queue由于只是将deque改头换面而成,技术上被归类为一种配接器 而对于关联式容器,STL可将其分为set(集合)和map(映射表)两大类

遇事不决,问春风 375

c++序列式容器(一):Vector

1. 概述 Vector维护的是一个连续的线性空间,有三个比较重要的指针,start指向目前使用空间的头,finish指向目前使用空间的尾,end_of_storage指向目前可用空间的尾。增加新元素的时候,如果备用空间不够,会将容量扩容到两倍。会经历“重新配置,元素移动,释放原空间”等过程,因此,扩容的时候效率会比较低,还需注意扩容后外部代码保存的iterator指针指向的还是旧的节点指针。 2...

formst001的博客 216

STL 源码剖析读书笔记三:序列式容器之 vector、list

STL 序列式容器 vector list

不积跬步,无以至千里 3566

【《STL源码剖析》提炼总结】 第3节:容器_1 序列式容器 vector list deque stack queue heap priority_heap

序列式容器 vector list deque stack queue heap priority_heap

qq_53157334的博客 1042

Chapter 4: 序列式容器之 vector

1:vector 的数据安排以及操作方式与 array 非常相似,但空间运用的灵活性就有差别。Array 是静态空间,空间一旦配置了就不能改变;然而 vector 是动态空间,它的内部机制能够自行扩充空间以容纳新元素;2:vector 的迭代器\quadvector 维护的是一个连续线性空间,所以不论其元素型别如何,普通指针都可以作为 vector 的迭代器而满足所有必要条件,所以 vector 的

weishenmetlc的博客 404

C++(标准库):14---STL容器之(序列式容器vector)

待续

董哥的黑板报 1202
上一篇: 子进程的异步等待方式
下一篇: 守护进程
L_XRUI
博客等级 码龄11年 83粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值