STL 之 vector

浅谈STL之Vector STL是Standard Template Library(标准模版库)的缩写,在该库中,包含着大量的预设容器、算法和迭代器,是一个可以简化编程难度和降低时间的好东西,有以下的优点。1. 高性能:STL容器和算法经过高度优化,提供了出色的性能,适用于各种应用场景。2.可复用性:STL代码具有高度的可复用性,可以在不同项目中重复使用,从而提高开发效率。3. 可移植性:STL是C++的标准组成部分,因此在不同的C++编译器和平台上都可以使用。 阅读详情

众所周知,常用的数据结构不外乎 array(数组)、list(串行)、tree(树)、stack (堆栈)、queue(队列)、hash table(杂凑表)、set(集合)、map(映像表)… 等等。根据「资料在容器㆗的排列」特性,这些数据结构分为序列式(sequence) 和关系型(associative)两种。

vector 的数据安排以及操作方式,与 array 非常像似。两者的唯㆒差别在于空 间的运用弹性。array 是静态空间,㆒旦配置了就不能改变;要换个大(或小) ㆒点的房子,可以,㆒切细琐得由客端自己来:首先配置㆒块新空间,然后将元 素从旧址㆒㆒搬往新址,然后再把原来的空间释还给系统。vector 是动态空间, 随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,vector 的 运用对于内存的樽节与运用弹性有很大的帮助,我们再也不必因为害怕空间不 足而㆒开始就要求㆒个大块头 array 了,我们可以安心使用 vector,吃多少用 多少。

vector 的实作技术,关键在于其对大小的控制以及重新配置时的数据搬移效率。 ㆒旦 vector 旧有空间满载,如果客端每新增㆒个元素,vector 内部只是扩充㆒ 个元素的空间,实为不智,因为所谓扩充空间(不论多大),㆒如稍早所说,是 「配置新空间 / 数据搬移 / 释还旧空间」的大工程,时间成本很高,应该加入某 种未雨绸缪的考虑。

为了降低空间配置时的速度成本,vector 实际配置的大小可能比客端需求量更大 ㆒些,以备将来可能的扩充。这便是容量(capacity)的观念。换句话说㆒个 vector 的容量永远大于或等于其大小。㆒旦容量等于大小,便是满载,㆘次再有新增元 素,整个 vector 就得另觅居所。

当我们以 push_back() 将新元素安插于 vector 尾端,该函式首先检查是否还有 备用空间?如果有就直接在备用空间㆖建构元素,并调整迭代器finish,使 vector 变大。如果没有备用空间了,就扩充空间(重新配置、搬移数据、释放原空间)

注意,所谓动态增加大小,并不是在原空间之后接续新空间(因为无法保证原空 间之后尚有可供配置的空间),而是以原大小的两倍另外配置㆒块较大空间,然 后将原内容拷贝过来,然后才开始在原内容之后建构新元素,并释放原空间。因 此,对 vector 的任何操作,㆒旦引起空间重新配置,指向原 vector 的所有迭 代器就都失效了。这是程序员易犯的㆒个错误,务需小心。

STL中Vector内存申请 Vector在系统中存储在一片连续内存中,支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。 Vector中初始化时是不分配空间的,之后每次遇见空间不足,都会重新分配空间,新的空间大小是原来的两倍。例如插入1个元素时,分配1的 阅读详情

相关推荐

海康威视HiTools实战:5分钟搞定工业镜头选型(附避坑指南)

本文详细解析了海康威视HiTools在工业镜头选型中的应用,通过五步操作流程帮助用户快速匹配适合的镜头型号。文章深入探讨了工业视觉系统的核心参数,包括焦距、视野、景深和畸变控制,并提供了光源搭配和系统集成的实战指南,助力提升机器视觉检测精度与效率。

u0v1w2x3的博客 1057

STL——vector

STL-vector

kaneki_11的博客 1149

关于mos管的压降问题(项目遇到问题总结)

在研发过程中没有出现问题的板子,到了小批时竟出现雷达一直在触发???找了大几天,没有头绪。心中疑惑颇多,加上老板催促,自考等原因,真是压力山大。4月份自考,只有差不多一个月时间了吧,没有什么大的收获,反而在查找硬件问题的过程中,发现了一个自己忽视的一个问题,就是关于Mos管的压降问题。 备考的过程崎岖不平,工作又问题多多,孰轻孰重,如何取舍?从心理来说,不想取舍什么,只是有所得就可以,过不了就过不了呗,已经毕业十五年了,没这个本科文凭不也过来了吗?只是代表了自己在这一段时间的思考,自己兴趣吧,没什么大不了

guangod的博客 2万+

[C++ STL] vector 详解

vector是STL中的一个容器,实现了动态数组的功能。它可以存储任意类型的元素,并提供了一系列的操作函数,如插入、删除、访问等。动态大小:vector的大小可以根据需要进行动态调整,可以随时增加或减少元素的数量。连续存储:vector的元素在内存中是连续存储的,可以通过下标快速访问元素。头部插入删除效率较低:由于在头部插入或删除元素时需要进行大块内存的复制或移动,导致效率较低。随机访问效率高:由于元素的连续存储,可以通过下标直接访问任意位置的元素。

石墨博客 1688

【为K8s的coredns配置上游DNS服务器】

为K8s的coredns配置上游DNS服务器一、背景描述二、如何修改coredns达到目的三、修改coredns 解析指定域名走指定dns①、get coredns configmap②、修改coredns configmap③、查询现有coredns pod并逐个重启④、验证解析是否正确 一、背景描述 有一个项目需要部署到客户内网,并通过nat映射实现外网访问! 项目中有多个服务之间调用是走的外网域名,项目采用k8s集群容器部署,客户的网络情况导致服务之间通过外网域名互调时总是 connection ti

那个那个 6670

在 SAP 系统中,成本中心(Cost Center)是成本核算与费用管控的基础组织单元,其设计质量直接决定了后续成本归集、分摊、分析及责任考核的准确性

SAP系统成本中心设计核心要点:1. 设计原则包括责任可控、业务同质、核算颗粒度适配、组织对齐及稳定性平衡;2. 划分维度主要有部门、功能、地域、项目和资产5类,可组合使用;3. 需避免颗粒度过细、跨责任主体归集等常见误区;4. 建议采用"明确目标-梳理业务-设计编码"三步法,建立科学的成本中心体系。合理的成本中心设计能精准归集费用、明确责任主体,为成本分析和管控奠定基础。

金牌架构师 1439

手撕STL——vector

C++,STL,vector,手撕

aaaaa_shen的博客 2094

Vibe Writing 手把手教程:Obsidian + Claudian + Skill

本文介绍了Vibe Writing的实操教程,主要使用Obsidian+Claudian+Skill组合。教程包含工具安装配置(Obsidian、Claudian插件)、核心工作流(选题-调研-写作-发布)和效果对比。重点展示了Claude Code生成的文本更具"人味"和场景感,优于其他AI工具。作者强调工具只是辅助,内容灵魂仍需个人思考积累。附有公众号排版和全网发布工具推荐,以及自动配图生成方案。

299

C++ STL vector

本文全面解析C++ STL中的vector容器,从基础使用到深度实现。主要内容包括:1. vector基础使用:构造函数、迭代器、容量管理(resize/reserve)、增删查改操作;2. 核心原理:扩容机制(1.5/2倍增长)、二维vector实现、迭代器失效问题及解决方案;3. 模拟实现:手写vector类模板,详解深拷贝与memcpy陷阱;4. 典型应用:结合OJ题目讲解异或运算、摩尔投票、电话号码组合等算法实现。文章强调vector作为动态数组的高效随机访问特性,并指出正确管理迭代器失效和深拷贝是

m0_68447088的博客 1572

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1549

交换机端口模式详解:Access、Hybrid、Trunk

交换机是网络中至关重要的组件之一,用于连接各种设备并启用数据的高效流动。为了更好地管理和控制网络流量,交换机提供了不同的端口模式,其中包括Access、Hybrid和Trunk。本文将深入探讨这三种端口模式,详细解释它们的配置、特性和应用场景,以帮助网络管理员更好地理解和优化网络架构。

网络技术联盟站 4016

【STL】 vector详解

vector是一个封装了动态大小数组的顺序容器,是一个能存放任意类型的动态数组,是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector的创建typename可以是任何基本类型,int ,duoble,结构体也可以是STL标准容器,string,set,queue等vector的构造//头文件// //构造空容器//构造含有n(10)个val(2)的容器//拷贝构造//迭代器拷贝构造//也可以使用其他容器的迭代器进行初始化构造//使用数组来构造(传的区间是左闭右开)

2401_85304329的博客 1677

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【C++】深入浅出STL之vector类

一文带你从浅至深认识并掌握C++STL中的vector类

做技术人 · 产优质博客 · 找好工作 1422

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【STL】vector

向量(vector)是一个封装了动态大小数组的顺序容器(Sequence Container),是一个能够存放任意类型的动态数组。

jmlangel_的博客 1194

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STL中vector的实现及面试问题

一、前言: 在学习c++的时候我们会接触两个库,一个是boost库另外一个就是STL库。关于STL库候捷先生的《STL源码剖析》中已经写的很详细了,今天我就关于STL中的vector实现及面试中的一些与之相关的问题做一个讲解。 在面试C++的时候关于vector是作为基础知识经常被问到的,如果面试官问你vector的实现原理,你会怎么回答呢? 二、vector的实现原理及实现机制 关于v

Payshent的博客 5425

C++STL系列之vector

vector用的也不少,需要多加练习。关于反向迭代器,这个会在stack和queue的那篇博客来讲,因为他们的思想一样明天更新list,stack,queue。

weixin_62188419的博客 1228

【STL详解】vector

【STL详解】vector

这是简介 3280

STL库容器之一:vector

本文介绍了C++ STL中vector容器的实现原理与关键特性。vector是一种动态数组,使用连续存储空间,支持快速随机访问。与静态数组相比,vector能动态调整大小,其核心实现包含三个指针:_start指向首元素,_finish指向末元素后位置,_end_of_storage指向分配空间末尾。文章详细分析了vector的构造、迭代器、容量管理(resize/reserve)和增删改查操作,重点探讨了迭代器失效问题(由扩容或删除引起)及解决方案。特别指出使用memcpy拷贝资源管理对象会导致浅拷贝问题,

2302_77620024的博客 8072

STL—容器—vector

有关c++的STL库中vector的了解和学习【对其接口的使用】

aaa114514aaaa的博客 795

STL之vector入门

向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。vector是STL中容器的一种,也是十分常用的一个容器,他与Array很相似,但两者唯一的区别就是Array是静态空间,一旦配置就不能改变,vector是动态空间,会随着元素的加入自动扩充空间。

angel_yc的博客 649

STL vector容器

STL中的容器: vector容器的常用接口及用法: vector:STL 中最常用的容器,和数组结构非常类似,也被称作单端数组; vector 容器和普通数组的区别:它们的不同之处在于,数组是静态空间(一旦给定了初始长度,无法修改),而 vector 容器可以动态扩展; 动态扩展:并不是在原有空间的后面续接新空间,而是找到在内存中一块更大的空间,先将原数据拷贝到新空间,后释放原空间; 图片转自于黑马程序员,是在学习的过程中截图下来的 各种函数接口具体如何使用,下面的代码块中会有详细的使用方法 vec

weixin_51196603的博客 514

STL vector 源码解析

前言 项目组要实现一个算法库,其中涉及到了类似vector的一维数组的实现。特此,对stl中得vector做个学习和了解。有任何问题,欢迎不吝指正。谢谢。 一、如何实现vector 如果给你一道面试题,如何用数据结构实现STL中vector的功能?聪明的你会怎么做呢?或许你会如下所述: 或许,如果不考虑分配效率,只需要两个成员就可以实现了 template class Vec

Rprop 1万+

STL-vector

因此迭代器失效,实际就是迭代器底层对应指针所指向的空间被销毁了,而使用一块已经被释放的空间,造成的后果是程序崩溃(即如果继续使用已经失效的迭代器,程序可能会崩溃)。rase删除pos位置元素后,pos位置之后的元素会往前搬移,没有导致底层空间的改变,理论上讲迭代器不应该会失效,但是:如果pos刚好是最后一个元素,删完之后pos刚好是end的位置,而end位置是没有元素的,那么pos就失效了。但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。

m0_74445123的博客 913
上一篇: STL值priority_queue
下一篇: STL之 list 和 slist
lfc2017
博客等级 码龄9年 2粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值