C++容器——vector

基本概念:

vector容器功能与数组的功能类似!

提供了动态数组的功能,即大小可以自动调整的数组

使用vector容器需加头文件          #include<vector>


与普通数值的区别:

大小调整:

普通数组:大小固定,一旦声明就需要指定其大小,并且之后无法改变。

vector容器:动态数组,可以在运行时自动调整大小。当元素数量超过当前容量时,vector会自动分配更多的内存以容纳更多元素。自动分配是动态扩展!

动态扩展:不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,释放原空间

内存管理:

普通数组:需要手动分配和释放数组所占用的内存,容易引发内存泄漏或越界错误。

vector容器:自动管理内存,包括分配、扩展和释放内存,减少负担,提高了代码的安全性。

初始化与构造:

普通数组:初始化时必须显式给出所有元素的值,或者默认初始化(例如,整型数组默认初始化为0)。

vector容器:提供多种构造方法,如默认构造、用特定数量的元素初始化、用区间内的元素初始化等。

接口丰富性:

普通数组:操作相对有限,主要依赖下标访问和指针算术。

vector容器:作为STL的一部分,提供了丰富的成员函数,如push_back, pop_back, insert, erase, size, empty等,便于元素的添加、删除和查询。

传递给函数:

普通数组:作为函数参数时,通常传递数组的指针(数组名),这使得难以确定数组的大小,且不能直接通过引用修改数组大小。

vector容器:可以按值传递、按引用传递或使用迭代器,更安全且功能更全面,尤其是当需要在函数内部修改容器时,传递引用避免了拷贝整个容器。

效率:

普通数组:由于其固定性和连续性,在已知大小且不需调整的情形下,访问速度可能更快,尤其是在循环遍历等场景。

 vector容器:在某些情况下(如尾部插入和删除)由于连续内存布局可以非常高效,但当需要在中间插入或删除元素时,可能涉及元素的大规模移动。


使用(迭代器):

定义和初始化:

定义:

vector <T> vectorname ;
//实质是类模板

解释:

T     数据类型

vectorname  为vector容器名

举例子:

#include<iostream>
#include<vector>
int main()
{std::vector <int> v;return 0;
}

初始化:

通过举例子可以很清晰明了的看出

#include<iostream>
#include<vector>
int main()
{//列表初始化std::vector <int> v1{1,2,3,4} ;std::vector <int> v2 = {1,2,3,4};//指定大小(默认初始化为0)std::vector <int> v3(4);//指定大小初始化(指定v4有3个元素都为1)std::vector <int> v4(3, 1);//拷贝初始化std::vector <int> v5 (v4);std::vector <int> v6 { v4 };std::vector <int> v7 = v4;std::vector <int> v8(v1.rbegin(), v1.rend());//区间拷贝,从末尾到首的拷贝return 0;
}

控制元素操作:

添加元素

使用push_back(a)在末尾添加元素a

使用insert(a,b)在指定位置a插入b元素(a为迭代器)

使用insert(a,b,c)在指定位置a插入b个c元素(a为迭代器)

使用emplace(a,b)在指定位置a插入元素b(就地构造)(a为迭代器)

使用emplace_back(a)在末尾添加元素a(就地构造)

[就地构造]:是一种直接在最终存储位置创建对象的技术。这种技术可以避免额外的复制或移动操作,从而提高效率和资源利用率。

删除元素

使用pop_back()删除最后一个元素

使用erase(a)删除指定位置a的元素(a为迭代器)

使用erase(a,b)删除指定范围的元素(a与b为迭代器)

使用clear()删除所有元素

使用resize(int a)减少大小来删除元素

容器操作:  

empty():

此函数用于判断容器是否为空。如果容器为空,则返回true,否则返回false。

size():

此函数返回容器中实际元素的数量,也就是容器的大小。

capacity():

此函数返回当前容器的容量,即在不重新分配内存的情况下,容器最多能容纳多少元素。这与当前元素的实际数量(size)可能不同。

resize(int num):

此函数用于重新指定容器的大小为num。

如果新的大小大于当前大小,容器会被填充默认值初始化的新元素直到达到num(对于内置类型如int,默认值通常是0)。

如果新的大小小于当前大小,容器尾部的元素会被移除,以减小容器的大小到num。

resize(int num, int elem):

这个是重载版本的resize同样用于调整容器大小到num,但当容器需要扩展时,新增的位置会使用指定的elem值进行填充,而不是默认值。

swap(n):

交换当前容器和容器n

数据存取:

[n]: 返回对容器中位置为 n 的元素的引用。(普通数组的访问数据方式在vector容器中也适用)

at(n): 返回对容器中位置为 n 的元素的引用,并进行边界检查。

front(): 返回对容器中第一个元素的引用。

back(): 返回对容器中最后一个元素的引用。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【打工日常】云原生之搭建一款多功能的个人网盘

一、JmalCloud介绍 1.JmalCloud简介 JmalCloud 是一款私有云存储网盘程序&#xff0c;主要用于简单轻量的管理个人存储资料的网盘。 2.项目特点 A.支持OSS,阿里云OS、腾讯云OSS和MinIOB.支持图片,音频,视频等文件的在线预览C.支持Word、Excel、PPT、流程图和思维导图的编辑…

1.VAM本体文件内容简介

目录介绍 1. Addonpackages 里面全是.var的包文件 2. BepInEx 是游戏的汉化插件 3. Custom 是游戏的资源&#xff0c;包括头发&#xff0c;服装&#xff0c;声音 4. Saves 是保存场景的默认目录 5. VaM(Config).bat 是启动游戏面板 可以选择分辨率&#xff0c;是否是…

游戏AI的智能化:机器学习在虚拟生命中的应用

文章目录 写在前面游戏AI的智能化&#xff1a;机器学习在虚拟生命中的应用游戏内容的自动化创作&#xff1a;机器学习的革新性应用玩家体验的个性化优化&#xff1a;机器学习的定制化力量未来展望&#xff1a;机器学习塑造游戏行业新纪元游戏AI的智能化发展自动化内容生成的革命…

cordova build android 下载gradle太慢

一、 在使用cordova run android / cordova build android 的时候 gradle在线下载 对于国内的链接地址下载太慢。 等待了很长时间之后还会报错。 默认第一次编译在线下载 gradle-7.6.1-all.zip 然后解压缩到 C:\Users\Administrator\.gradle 文件夹中,下载慢导致失败。 二…

《老相册》读后感

外面在下着瓢泼大雨&#xff0c;豆粒大的雨点打在窗户上&#xff0c;发出啪啪的巨响。这样的雨天&#xff0c;是不适宜外出的&#xff0c;最惬意的方式就是一个人待在宿舍里&#xff0c;打开一本书&#xff0c;慢慢地看&#xff0c;静静地想&#xff0c;让所有的烦恼融化在这雨…

39.乐理基础-拍号-认识音符

拍号是一个分数的形式&#xff0c;如下图篮色的圈圈里的东西&#xff0c;但它的实际意义和分数没什么关系&#xff0c;只是外观上是一个分数的形式 单独拿出拍号&#xff0c;如下图&#xff1a; 然后接下来只要搞懂什么是 Y分音符、一拍、小节就可以了。 音符&#xff1a; 控…

图神经网络GNN的表达能力

回顾 图卷积神经网络GCN GNN概要 神经网络的表达能力 分类or回归 神经网络的表达能力举例&#xff1a; 深度学习的理论基础和上限 GNN的表达能力 定义&#xff1a;图神经网络的表达能力就是它区分不同图的区分能力 分析常见的GNN的表达能力并设计出表达能力最强的GN…

proc 文件系统

proc 文件系统是一个虚拟文件系统&#xff0c;它以文件系统的方式为应用层访问系统内核数据提供了接口 &#xff0c; 用户和应用程序可以通过 proc 文件系统得到系统信息和进程相关信息 &#xff0c;对 proc 文件系统的读写作为与内核进行通信的一种手段。但是与普通文件不同的…

基于 docker-compose 部署 LNMP 架构

目录 前言 1、任务要求 2、Nginx 2.1 建立工作目录并上传相关安装包 2.2 编写 Nginx Dockerfile 脚本 2.3 准备 nginx.conf 配置文件 3、Mysql 3.1 建立工作目录并上传相关安装包 3.2 编写 Mysql Dockerfile 脚本 3.3 编写 my.cnf 配置文件 4、PHP 4.1 建立工作目录…

【C++】模板初阶:泛型编程的起点

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

使用qemu运行risc-v ubuntu

参考 Ubuntu installation on a RISC-V virtual machine using a server install image and QEMU 用到的文件 fw_jump.bin u-boot.bin:西部世界vp ubuntu-22.04.3-preinstalled-server-riscv64unmatched.img 1 镜像准备 ubuntu.com 1.1 镜像选择 如上在下载 Ubuntu S…

数据存储-SQLiteOpenHelper

SQLiteOpenHelper数据库操作辅助类&#xff0c;本身是一个抽象类&#xff0c;抽象类无法直接实例化&#xff0c;所以通常都会自定义类&#xff0c;去继承抽象类&#xff0c;然后再实例化自定义的类。 public class MyHelper extends SQLiteOpenHelper {public MyHelper(Nullab…

mac传输安卓手机照片视频-好用工具推荐

MacDroid,有线连接安卓手机传输速度非常快&#xff0c;之前用过很多款都不如这个快

每日一博 - 闲聊架构设计中的多级缓存设计

文章目录 方法论概述客户端缓存应用层缓存服务层缓存缓存设计的注意事项总结 思维导图戳这里 方法论概述 从客户端到服务层&#xff0c;缓存的应用广泛而重要。通过合理的缓存设计&#xff0c;能够有效地提高系统的性能并降低延迟。 客户端缓存 在客户端层面&#xff0c;浏览…

一、RocketMQ基本概述与部署

RocketMQ基本概述与安装 一、概述1.MQ概述1.1 用途1.2 常见MQ产品1.3 MQ常用的协议 2.RocketMQ概述2.1 发展历程 二、相关概念1.基本概念1.1 消息&#xff08;Message&#xff09;1.2 主题&#xff08;Topic&#xff09;1.3 标签&#xff08;Tag&#xff09;1.4 队列&#xff0…

小白如何搭建git

1、安装git 在Windows上安装git&#xff1a; 关注微信公众号“机器人学”回复 “搭建git” 利用百度云网盘下载安装包&#xff0c;建议下载如下版本的否则可能会出现错误。 安装完成后&#xff0c;在开始菜单里Git->git bash&#xff0c;弹出命令窗说明git安装成功。 鼠标右…

【Linux系统编程】第十三弹---项目自动化构建工具-make/Makefile

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、背景 2、编写makefile 2、make原理 3、理解makefile 4、优化makefile 总结 1、背景 ★ 会不会写makefile&#xff0c;从…

炒股市场创业板指高开0.42%,证券板块持续活跃

查查配4月29日电 29日早盘,A股三大指数开盘走势分化。上证指数跌0.06%,报3086.68点;深证成指涨0.17%,报9479.60点;创业板指涨0.42%,报1831.44点。 同创优配是AAA 级诚信经营示范单位,中国人民银行备案认证,天眼查可查询。是一家专注于股票投资、金融服务、及资产管理的专业机构…

翻译《The Old New Thing》 - Implementing higher-order clicks

Implementing higher-order clicks - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20041018-00/?p37543 Raymond Chen 2004年10月18日 实现更高阶的点击 人们常问的另一个问题是&#xff1a;“我怎么做三击或更高阶的点击&#xff1f;” 一…

docker-compose安装es 8.12.2

小伙伴们&#xff0c;你们好&#xff0c;我是老寇&#xff0c;我又回来辣&#xff0c;几个月不见甚是想念啊&#xff01;&#xff01;&#xff01; 因云平台需要改造&#xff0c;es7升级为es8&#xff0c;所以记录一下&#xff0c;es8需要开启ssl认证&#xff0c;需要配置证书…