【C++STL】Vector扩容机制

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥c++系列专栏:C/C++零基础到精通 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述

c语言内容💖:

专栏:c语言之路重点知识整合

【c语言】全部知识点总结


目录

  • Vector
  • Vector 扩容机制
  • 为什么需要扩容机制
  • 扩容策略
  • 什么时候扩容

Vector

Vector是 C++中常用的 STL 容器,能够方便地进行元素的添加、删除和访问操作

动态数组,里面有一个指针指向一片连续的内存空间,与数组的差别在于对空间利用的灵活性

vector 中删除数据时,vector 的容量不变;扩容时可能导致迭代器失效

Vector 内函数:

#include <vector>
using namespace std;
class Vector
{
Protected:
    Iterator start;					//表示目前使用空间的头
    Iterator finish;				//表示目前使用空间的尾
    Iterator end_of_storage;		//表示目前可用空间的尾
Public:
    Iterator begin();				//获取头元素迭代器
    Iterator end();					//获取尾元素迭代器
    Reference front();				//返回首元素的值
    Reference back();				//返回尾元素的值
    Size_type size();				//返回使用空间的大小
    Size_type capacity();			//返回容量的大小
    void push_back(const T& x);		//将元素插入到最尾端
    void pop_back();				//将最尾端的元素取出
    Iterator erase(iterator position);//清除某位置上的元素,返回下一节点迭代器
    void insert(位置,数值);		    //在某个位置插入多少个元素
    void clear();			    	//清除所有元素
};

在这里插入图片描述

Vector 扩容机制

Vector 在存储元素时,会预先分配一定的存储空间。当不断向 Vector 中添加元素,导致已分配的空间不足时,就需要进行扩容 来增加存储空间,以满足新元素的添加需求


为什么需要扩容机制

通过扩容机制,Vector 能够灵活地适应元素数量的变化,提供稳定和可靠的数据存储


扩容策略

  1. 固定倍数扩容
    • 每次扩容为原来容量的两倍。假设初始容量为n,当空间不足时,将容量扩展为2n
    • 优点:简单高效
    • 缺点:可能会造成空间浪费
  2. 渐进式扩容
    • 每次扩容增加一个固定的增量,比如每次增加n个元素的空间
    • 优点:可以控制空间增长减少不必要的浪费
    • 缺点:扩容次数可能较多

扩容时需要重新分配更大的内存空间,并将原有的元素复制到新的空间中


什么时候扩容

vector 类本身起始只有三个指针,_start_finish_end_of_storage分别指向了数据开始的地方,数据结束的地方,和数组的结尾

_start 指针和 _end_of_storage 指向了同一个地方,说明数组的空间已经用完了,这个时候就需要扩容

在这里插入图片描述


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

“Hello, World!“ —— 初学者进入编程世界的第一步

布莱恩W.克尼汉&#xff08;Brian W. Kernighan&#xff09;—— Unix 和 C 语言背后的巨人 布莱恩W.克尼汉 布莱恩W.克尼汉在 1942 年出生在加拿大多伦多&#xff0c;他在普林斯顿大学取得了电气工程的博士学位&#xff0c;2000 年之后取得普林斯顿大学计算机科学的教授教职。…

SpringBoot开启事务日志

一般框架开启日志的方式&#xff1a; 开启某个包下的日志就写该包路径&#xff0c;开启某个类下的日志就写该类路径。

3d渲染软件有哪些(1),渲染100邀请码1a12

3D渲染是把三维模型转成2D图像的过程&#xff0c;领域不同常用的软件也不一样&#xff0c;今天我们就简单介绍几个。 在介绍前我们先推荐一个设计人员常用到的工具&#xff0c;就是网渲平台渲染100&#xff0c;通过它设计师可以把本地渲染放到云端进行&#xff0c;价格也不贵&a…

PCL笔记二 之VS环境配置(不同版本Debug+Release编译)

PCL笔记二 之VS环境配置&#xff08;不同版本DebugRelease编译&#xff09; PCL官网&#xff1a;https://github.com/PointCloudLibrary/pcl/releases众所周知&#xff0c;PCL是一个用于点云处理并且依赖不少三方库的一个算法库&#xff0c;同时在编译配置环境时也很复杂&…

【嵌入式DIY实例】-Nokia 5110显示BME280传感器数据

Nokia 5110显示BME280传感器数据 文章目录 Nokia 5110显示BME280传感器数据1、硬件准备与接线2、代码实现本文将介绍如何使用 ESP8266 NodeMCU 板(ESP12-E 模块)和 BME280 气压、温度和湿度传感器构建一个简单的本地气象站。 NodeMCU 从 BME280 传感器读取温度、湿度和压力值…

轻松打造分班查询系统,这个工具助您一臂之力!

新学期伊始&#xff0c;老师们知道该如何快捷制作并发布分班查询系统吗&#xff1f;面对繁杂的学生名单和班级分配&#xff0c;无疑是一项巨大的麻烦。传统的纸质通知效率低下&#xff0c;容易出错&#xff0c;更别提在信息传递过程中可能出现的混乱和误解了。 现在有一个工具可…

枚举的使用(enum)

文章目录 前言一、枚举是什么&#xff1f;二、枚举的使用 1.使用枚举设置常量2.操作枚举类型成员的方法3.枚举类型中设置构造方法&#xff08;给枚举常量赋值&#xff09;4.枚举常量中设置方法总结 前言 枚举类型可以将常量封装在类或接口中&#xff0c;提供了安全检查的功能。…

开源网安参与编制的《代码大模型安全风险防范能力要求及评估方法》正式发布

​代码大模型在代码生成、代码翻译、代码补全、错误定位与修复、自动化测试等方面为研发人员带来了极大便利的同时&#xff0c;也带来了对安全风险防范能力的挑战。基于此&#xff0c;中国信通院依托中国人工智能产业发展联盟&#xff08;AIIA&#xff09;&#xff0c;联合开源…

什么是CDN?CDN的工作原理是怎样的?

1.什么是CDN&#xff1f; CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。CDN是构建在网络之上的内容分发网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需内容&am…

分压电路 ADC计算电压 【老板再也不能开除我了 】

经典分压电路 一个电压过来 adc这里的电压等于&#xff1a; 如是12位adc 那么他最大值就是4095 如参考电压是5v 则&#xff1a;5v/4095 实际电压V*(R2/(R1R2)&#xff09;/adc值 转化&#xff1a;实际电压V 5v*(adc值/4095)/(R2/(R1R2)) &#xff1a;老板再也不能 因为不会…

word文档怎么加密?电脑文件加密的详细步骤【分享4个】

为了保护Word文档不被未经授权的人员访问或修改&#xff0c;我们通常会采用加密的方式来增加其安全性。那么Word文档怎么加密&#xff1f;电脑文档安全成为了大家所关心的话题。 本文针对不同的情况&#xff0c;本文分享了4种电脑文件加密的方法&#xff0c;每一种加密方法都比…

2-自动驾驶关键技术框架

框架 来自《自动驾驶汽车决策与控制》这本书 三大技术 车载平台的关键技术&#xff1a; 环境感知技术&#xff1a;这是自动驾驶车辆能够“看”和“感知”周围世界的技术。它包括使用摄像头、雷达、激光雷达&#xff08;Lidar&#xff09;和超声波传感器来检测和识别道路、障…

js实现数据加密,jwt加密方式

一个简单的数据加密 const crypto require("crypto");// 普通的数据加密 function sign(msg,key){ // 原始信息&#xff0c;密钥 String// "sha256" :加密的算法&#xff0c;key :密钥&#xff0c;msg :要加密的信息&#xff0c;"hex" :转成16…

【unity笔记】六、UI实现下拉列表切换视角

具体步骤如下 1. 创建UI下拉列表&#xff1a; 在Unity场景中右键点击并选择UI -> 下拉列表 来创建一个新的下拉列表。 2. 添加摄像机选项&#xff1a; 在Dropdown的Options属性中添加新的选项&#xff0c;通过点击按钮来添加选项&#xff0c;并为每个选项设置一个显示名…

创建github个人博客

文章目录 安装Hexo安装git安装Node.js安装 Hexo 安装Hexo 参考官方文档&#xff1a;https://hexo.io/zh-cn/docs/ Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown&#xff08;或其他标记语言&#xff09;解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的…

springboot多数据源应用,A服务依赖于B服务jar包,A服务和B服务业务数据分别入自己的库如何做?

上一节我们简单阐述了springboot多数据源如何配置。在实际的业务场景中我们常常遇到A服务依赖于B服务jar包&#xff0c;A服务和B服务业务数据分别入自己的库中。为何要这么做呢&#xff1f;比如B服务是日志SDK&#xff0c;A服务集成B服务来实现记录日志的功能&#xff0c;但是日…

Stable Diffusion 3 正式开源,超强文生图模型 SD3-M 上线,赶紧来试试吧!

前言 我们都知道 Stable Diffusion 3 是一款强大的文生图模型&#xff0c;拥有20亿参数&#xff0c;因其高效的推理速度和卓越的生成效果而备受瞩目。 近日&#xff0c;Stability AI在推特上宣布正式开源了 Stable Diffusion 3 Medium&#xff08;SD3-M&#xff09; 权重&…

网络编程篇: HTTPS协议

一.前置知识 早期很多公司刚起步的时候&#xff0c;使用的应用层协议都是HTTP&#xff0c;而HTTP无论是用GET方法还是POST方法传参&#xff0c;都是没有经过任何加密的&#xff0c;因此早期很多的信息都是可以通过抓包工具抓到的。 为了解决这个问题&#xff0c;于是出…

网络安全事件研判

研判&#xff08;入侵检测&#xff09; 研判我理解为人工层面对入侵检测事件进行再分析&#xff0c;即借助已有的设备告警根据经验判断是否为真实攻击 研判工作要充分利用已有安全设备&#xff08;需要提前了解客户的网络拓扑以及部署设备情况&#xff09;&#xff0c;分析其近…

【SQL Server数据库】关系模式与关系代数

目录 一、请用关系代数完成下列查询 1. 求 供应工程J1 零件P1的供应商号码SNO&#xff1b; 2. 求 供应工程J1 零件&#xff08;P&#xff09;为红色 的供应商号码SNO&#xff1b; 3. 求 没有使用 天津供应商&#xff08;P&#xff09;生产的红色零件&#xff08;S&#xff0…