stl之序列容器——vector

C++11 STL之vector实现深入剖析(上) 概述         vector是一种线性容器,因此它的所有成员都是按照严格的线性排序。Vector是通过动态数组来实现的,因此它的成员都是存放在连续的内存中。所以我们不仅可以通过迭代器去遍历成员,还可以通过成员的指针加偏移来访问。因此vector擅长 通过下标来索引单个成员 任意顺序迭代访问所有成员 从尾部追加或删除成员 类图         首先我们来看下vector的类图,为了便... 阅读详情

         vector内部维护了start,finish,end_of_storage三个迭代器,分别表示目前使用空间的头、尾及目前可用空间的尾。当空间不够使用时,会动态增长。

一些常用的元素操作方法如下:

front    //第一个元素

back   //最后一个元素

push_back   //将一个元素插入vector尾部

insert    //指定位置插入

pop_back   //清除最后一个元素

erase   //清除某个元素

begin

end

resize   //调整容量方法

reserve  //保留n个空间的方法,在知道vector的容量下,调用此方法可以提高效率,避免vector的重建

size 元素的个数

capacity // vector的空间大小 >= size

empty 其实现如下:

bool empty() const
    {return begin() == end(); }      

clear  //本质上是调用了erase,只是析构了对象,但并没有销毁空间,如果要销毁空间,请用swap,用法如下:

{
	vector<T> vecTemp;
	vecTemp.swap(vec);   //vec为待释放的对象,这样离开作用域后对象会被释放
}

其调用了algorithm中的swap,实现如下:

 void swap(vector<_Tp, _Alloc>& __x) {
   __STD::swap(_M_start, __x._M_start);
   __STD::swap(_M_finish, __x._M_finish);
   __STD::swap(_M_end_of_storage, __x._M_end_of_storage);
  }

         vector的插入操作(调用insert和push_back),如果可用空间不足的话,vector会重新分配空间(重分配的空间为原来的2倍,或2倍以上),然后将原内容拷贝过去并释放原来的空间。因此,对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。

         vector支持随机存储操作,其使用的迭代器是RandomAccessIterator

         当已知插入元素的数量时,可以事先使用reserve函数来分配足够大小的内存,防止内存的重复分配和释放,提高效率。vector的插入和删除操作效率较差,如果这两种操作比较频繁,请使用list或set/map。

需要指出的是,vector是非异步安全的,如涉及多线程操作的话,需要自行采取同步措施。

vector详解 引言emmm…这篇博客写作的缘由其实就是我在日常使用vector的时候发现对vector并不怎么了解所以决定写这篇博客的。 写这篇博客,我参考了vector - C++ Reference中的内容,及侯捷先生的《STL源码剖析》一书,所实验的环境是CentOS7,g++4.8.5,所查看源码是SGI STL v3.3。这个版本的STL发布于2000年,而且是最新版。所以不包含C++11后的内容,所 阅读详情

相关推荐

STL源码剖析——序列容器之vector

在STL编程中,我们最常用到的就是容器,容器可分为序列容器和关联容器;本文记录的是我们经常使用的序列容器之vector,vector的数据安排和操作方式类似于C++内置数组类型array,唯一的区别就是在于空间的灵活运用。内置数组array是静态空间,一旦分配了内存空间就不能改变,而vector容器可以根据用户数据的变化而不断调整内存空间的大小。 vector容器有已使用空间和可用空间,已使用空间是指vector容器的大小,可用空间是指vector容器可容纳的最大数据空间capacity。ve

关注校招求职,微信号:job_campus 2497

vector向量容器——STL Introduction

vector介绍: vector容器是一个线性结构,用3个指针存放向量的起始字节位置、当前最后一个元素的末尾字节和整个容器所占的内存空间的末尾字节。如下图所示,3个指针变量分别为: M_start、M_finish、M_end_of_storage. 查看大图 图   vector容器的数据结构 vector容器在尾端插入和删除元素,算法时间复杂度为O(1)常数阶,其

FrankyT1986的专栏 418

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

一、定义 vector底层是动态分配的数组,随着元素的增加,内部机制会自动扩充空间以容纳新的元素。

HappyToEat的博客 592

【深度探索STL】详解 vector 内部机制

前面初步介绍了序列式容器 vector :初识序列式容器vector,这里试图通过简单剖析源码来了解 vector 的内部机制,参考资料:《STL 源码剖析》(侯捷)

wenqian 'blog 6518

晶晨S905L3S/S905L3SB芯片刷机实战:BL加载工具与线刷固件全解析

本文针对晶晨S905L3S/S905L3SB芯片电视盒子刷机时常见的2%失败问题,提供了两种核心解决方案。一是使用已集成特殊通信协议的专用版USB Burning Tool(如V2.2.5/V2.2.7),二是采用旧版工具配合独立的BootLoader加载工具。文章详细解析了两种方案的原理、操作步骤、固件选择及常见问题排查,旨在帮助用户成功完成刷机,让老旧设备焕发新生。

weixin_29238147的博客 1107

自动驾驶必备:5分钟搞懂gPTP如何实现μs级时间同步(附开源代码)

本文深入解析了gPTP协议在自动驾驶系统中实现微秒级时间同步的核心机制与工程实践。针对多传感器融合与跨域协同的严苛需求,文章拆解了gPTP的频率同步、对等延迟测量与时间偏移校正三步流程,并提供了基于linuxptp和AVnu gPTP两大开源代码库的实战配置指南与性能评估方法,助力开发者构建高精度、高可靠的车载时间同步网络。

weixin_29211309的博客 167

C++ vector STL实现详解

前言 stl库位置 vector代码分析 vector变量gdb输出总结0.前言  早前使用gdb调试特别不习惯,1)没有具备图形界面IDE(比如Visual Studio)的强大功能:边打断点边代码跟进,退出断点保存,可以随时查看当前变量数据,对stl变量显示友好。2)gdb打印输出的内容有时难以理解,比如gdb只会打印出stl相关容器、复杂的类对象,智能指针的成员数据,而不会做格式化内容输出。比

cyber的博客 3589

从实习生到独立上手:我是如何用海思PQTool搞定IPC图像调试的

本文分享了从实习生到独立使用海思PQTool进行IPC图像调试的成长历程。通过工具搭建、核心参数调整和实战案例,详细介绍了如何高效解决图像质量问题,特别强调了ISP调试中的关键参数和实用技巧,适合刚入门的图像调试工程师参考。

weixin_33756596的博客 312

STL之序列式容器(Vector/Deque/List)

序列式容器包括:静态数组array、动态数组vector、双端队列deque、单链表forward _list、双链表list。这五个容器中,我们需要讲解三个vector、deque、list的使 用,包括:初始化、遍历、尾部插入与删除、头部插入与删除、任意位置进行插入与 删除、元素的清空、获取元素的个数与容量的大小、元素的交换、获取头部与尾部元素等。

weixin_44664985的博客 1306

告别手动输入!用Burp插件+ddddocr,5分钟搞定图片验证码自动识别

本文详细介绍了如何利用Burp插件和ddddocr开源库快速构建图片验证码自动识别系统,实现高效、零成本的验证码自动化解决方案。通过环境搭建、性能调优和Burp Suite深度集成,显著提升安全测试效率,特别适用于金融和电商系统的批量测试场景。

weixin_29099217的博客 200

2023最新扫码连wifi-扫码挪车-聚合CPS返利多合一小程序源码

2023最新扫码连wifi-扫码挪车-聚合CPS返利多合一系统 系统特点: 目前已接入的 CPS 渠道: 充值:话费充值、电费充值、影视会员充值、会员卡券充值 本地团购:联联周边游 电商平台:京东、拼多多、唯品会、淘宝、抖音美团:外卖、闪购、酒店、到店、优选饿了么:外卖、商超 出行服务:滴滴打车、滴滴加油、滴滴货运、花小猪打车、高德打车、同程打车 连锁餐饮点餐:肯德基、麦当劳、百果园、奈雪的茶、瑞幸咖啡、星巴克、喜茶、汉堡王、必胜客电影票:特价电影票 注意:以上涉及到需要支付的 CPS 渠道,不需要预存!

qq_41837379的博客 3110

STL源码剖析—序列式容器—vector

容器:array(数组)、list(串行)、tree(树)、stack(堆栈)、queue(队列)、hash table(散列表)、set(集合)、map…根据存储方式可以分为:序列式容器和关联式容器 序列式容器:容器里面的数据可以排序,但是不会自动有序,可以利用算法排序; 关联式容器:容器里面的数据不可排序,以键值对的形式存储。 VECTOR 数据结构:数组; vector和arra...

weixin_42237937的博客 209

从零开始做对容量规划:一文讲透 SAP Greenfield sizing 与 Quick Sizer 落地方法

摘要 SAP项目早期硬件规划面临业务细节缺失的挑战,Greenfield sizing方法通过Quick Sizer工具将业务需求转化为硬件资源需求。该方法聚焦主要负载驱动因素而非精确预测,采用标准化问卷形式输入并发用户数、业务处理量等参数,输出内存、CPU等资源需求。关键步骤包括选择正确的Quick Sizer版本、创建sizing项目、参考SAP基准测试和认证目录校准结果,最终将需求交由硬件厂商落地。该方法特别适用于缺乏历史数据的新系统部署,帮助在不确定性中建立可控的容量规划模型,避免资源浪费或性能不足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 211

C++ STL容器——序列式容器(array、vector、deque、list)

概述 1.C++ STL的容器分为三种,序列式容器,关联式容器,无序式容器,这里先说说常用的序列式容器。 2.array,vector,deque,list,forward_list这几种都是序列式容器,序列容器是以线性序列的方式存储元素,也就是说,在内存,是连续分配一块内存来存放元素的,是可以经过标迭代的方式遍历元素。 3.C++的容器是不能用来装引用和函数的,容器的设计原则是以效率为,安全为次的,所以容器本身并不带有异常处理。 一.基本用法 所有的序列式容器都有一些共同的属性和用法,这里我拿最学常用的s

知来者逆的博客 1668

Transformer实战(32)——Transformer模型压缩

在本节中,我们学习了如何在硬件资源受限的情况下减轻运行大模型的负担。我们介绍了如何通过蒸馏、剪枝和量化从训练好的模型中提取高效模型。预训练轻量级的通用语言模型(如 DistilBERT) 可以在各种任务上进行微调,并表现出与非蒸馏模型相当的性能。随着数据量的不断增加,我们希望模型能够更快地运行,在这方面,高效 Transformer 起着至关重要的作用。

盼小辉丶的博客 2547

电磁场仿真软件:Sonnet_(12).Sonnet与其他软件的集成

Sonnet作为电磁场仿真领域的强大工具,不仅能够独立完成复杂的仿真任务,还可以通过与其他软件的集成,实现更高效的工作流程和更广泛的功能扩展。通过与CAD、EDA、数据处理软件、MATLAB、Python以及云计算平台的集成,Sonnet用户可以更好地利用现有设计资源,进行参数优化和结果分析,从而提升设计和仿真效率。希望本节的内容能够帮助你更好地理解和应用Sonnet的集成功能。

kkchenjj的博客 1432

STL序列容器——vector

二、vector vector<T> 容器是包含 T 类型元素的序列容器,和 array<T,N> 容器相似,不同的是 vector<T> 容器的大小可以自动增长,从而可以包含任意数量的元素;因此类型参数 T 不再需要模板参数 N。只要元素个数超出 vector 当前容量,就会自动分配更多的空间。只能在容器尾部高效地删除或添加元素。 引入头文件...

android葱的博客 251

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

STL概览-序列容器vector,deque,list(三)

 ===================================================容器container|->用来管理一组对象的集合,这里的对象叫做元素。|->分类|      |->序列式容器|      |            |->每个被插入的元素,都有一个固定的位置,这个位置取决于操作者(程序或者程序  |    |            员

梦、追随、路 1911

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STL序列容器vector、deque、list和array学习笔记

C++  STL序列容器vector、deque、list和array学习笔记   一、vector(矢量) 在头文件#include中定义的 vector是数组的一种类表示,它提供了自动内存管理功能,可以动态地改变vector对象的长度,并随着元素的添加和删除而增大和缩小。他提供了对元素的随机访问。在尾部添加和删除元素的时间是固定的,但在头部或者中间插入和删除元素的复杂度为线性时间。

sky0942的博客 1071

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

《STL源码剖析》深入分析序列式容器——vector

vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。吃多少用多少。 (1)vector的空间配置数据结构: iterator start; //已使用空间的头 iterator finish; //已使用空间的尾 iterator end_of_storage; //目前可用空间的尾 (我们都知道一个vecto

松狮 842

【STL二】STL序列式容器(array、vector、deque、list、forward_list)

序列容器

junxuezheng的博客 1704

C++ STL全面解析:六大核心组件之一----序列式容器(vector和List)(STL进阶学习)

vector的数据结构跟array是非常相似的,只不过他们有一点不同,那就是array在定义时会被限制住大小,是静态的容量。而vector则是动态的容量,可以根据插入数据的数量去自动扩容容量。我们不必再去担心初始化数组的时候去定义一个大块头,使用vector时这个顾虑将烟消云散。vector的实现技术关键在于对其大小的控制以及重新分配时数据迁移的效率,一旦vector的空间满载,如果客户端每新增一个元素,vector随之去增加一个元素这种效率肯定是很慢的。所以vector是采用的未雨绸缪机制。

LKHzzzzz的博客 1420

[C++]STL总结(二)vector以及序列型容器总结

[C++]STL总结(二)vector以及序列型容器总结 以下为vector总结 #include<iostream> #include<vector>//vector #include<algorithm> #include<numeric> using namespace std; int main() { //以下为vector对象的创建 vector<int> V1; vector<int> V2(10);//vect

m0_46401512的博客 180

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

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

WildPointer的博客 1282

❤️ 【STL 序列式容器】 vector 超硬核源码剖析 ❤️

目录前言第4章 序列式容器4.1 容器的概念与分类4.1.1 序列式容器4.2 vector4.2.1 vector概述4.2.2 vector定义摘要4.2.3 vector的迭代器4.2.4 vector的数据结构4.2.5 vector的构造与内存管理4.2.6 vector的元素操作 前言 国庆七天假宛如一天假,定睛一看又要上班… 国庆档电影院热闹了不少,《长津湖》真的值回票价,吴京真不错,意外的是易烊千玺竟然演出了小戏骨的感觉,整部电影很有感染力,点赞! 外滩一如既往的人山人海,不过每次抱着去看人

GOOD GOOD STUDY, DAY DAY UP 887

C++11 STL 序列式容器 vector、list、string、deque...

底层结构 是动态数组,在堆中分配内存,元素连续存放,有保留内存,如果减少大小后,内存也不会释放;如果新值大于当前大小时才会重新分配内存。 vector 具有以下特性: O(1)时间的快速访问 顺序存储,所以插入到非尾结点位置所需时间复杂度为O(n),删除也一样; 扩容规则: 当我们新建一个 vector 的时候,会首先分配给他一片连续的内存空间,如std::vector vec,当通过push...

身在边城 心在编程 601
上一篇: stl之迭代器(iterator)
下一篇: stl之序列容器——list
LinuxG_G
博客等级 码龄15年 58粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值