C++系列-Vector(一)

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”   

Vector的介绍及使用

Vector的介绍

当vector构建的参数类型为char类型时,它是和string是极其类似的,但是二者之间也有不同,比如,对于vector而言,它可以兼顾其他不同的类型,而string只能是针对字符串的,而当我们详细学习了string之后,我们学习其他的STL的东西会变得更加简单。

  1. Vector是表示可变大小数组的序列容器。
  2. 就像数组一样,Vector也采用的连续存储空间来存储元素,也就是意味着可以采用下标对Vector的元素进行访问,和数组一样高效,但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。
  3. 本质讲,Vector使用动态分配数组来存储它的元素,当新元素插入时候,这个数字需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组,就时间而言,这是一个相对代价高的任务,因为每当一个新的元素加入到容器的时候,Vector并不会每次都不会重新分配大小。
  4. Vector分配空间策略:Vector会分配一些额外的空间以适应可能得增长,因为存储空间比实际需要的存储空间更大,不同的库采用不同的策略权衡空间的使用和重新分配,但是无论如何,重新分配都应该是对数增长的间隔大小,以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。
  5. 因此,Vector占用了更大的存储空间,为了获得管理空间的能力,并且以一种有效的方式动态增长。
  6. 与其他动态序列容器相比,Vector在访问元素的时候更加高效,在末尾增加和删除元素相对高效,对于其他不在末尾的删除和插入操作,效率更低。

Vector的使用

push_back函数

void test_vector1()
{
	vector<double> v2;
	vector<int> v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);
	v1.push_back(4);
	for (size_t i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;
}
int main()
{
	test_vector1();
	return 0;
}

其实对于push_back而言,这个没什么好说的,它会在Vector原先存储空间的后面加上字符。

其实在文件中也有着详细的介绍,当插入时空间不够时,会自动进行扩容。

而对于Vector函数的遍历方式,我们这里也会讲到多种:

	for (size_t i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;
	for (size_t i = 0; i < v1.size(); i++)
	{
		cout << v1[i] << " ";
	}
	cout << endl;
	vector<int>::iterator it1 = v1.begin();
	while (it1 != v1.end())
	{
		cout << *it1 << " ";
		it1++;
	}
	cout << endl;
	for (auto e : v1)
	{
		cout << e << " ";
	}
	cout << endl;

包括下标[]访问,迭代器和范围for,这个基本和前面我们讲过的string是一样的。

void test_vector2()
{
	vector<string> v2;
	string s1("张三");
	v2.push_back(s1);
	v2.push_back(string("李四"));
	v2.push_back("王五");

	v2[1] += "来";
	for (const auto& e : v2)
	{
		cout << e << " ";
	}
	cout << endl;
}
int main()
{
	test_vector2();
	return 0;
}

 

对于Vector而言,其实更令人惊叹的就是他可以进行复用,可以在Vector的里面套用其他的东西,比如List,string,甚至是另一个Vector。

要是套用的是string,那么就是顺序表的每一个元素都代表的是一个String。

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

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

相关文章

在conda的环境中安装Jupyter及其他软件包

Pytorch版本、安装和检验 大多数软件包都是随Anaconda安装的&#xff0c;也可以根据需要手动安装一些其他软件包。 目录 创建虚拟环境 进入虚拟环境 安装Jupyter notebook 安装matplotlib 安装 pandas 创建虚拟环境 基于conda包的环境创建、激活、管理与删除http://t.cs…

04:定时器

定时器 1、定时器怎么定时2、怎样实现计数&#xff1f;2.1、控制寄存器TCON2.2、工作模式寄存器TCOM2.3、定时器T0 3、案例&#xff1a;通过定时器T0控制LED间隔1s亮灭 当定时器用的时候&#xff0c;靠内部震荡电路数数。当配置为定时器使用时&#xff0c;每经过1个机器周期&am…

全国排名第一的起名大师颜廷利:唯有量力而行,才能。。。

在探索成功与个人成长的旅程中&#xff0c;中国传统哲学提供了一个独特的视角&#xff1a;量力而行&#xff0c;以展现最靓丽的自我。这一理念不仅深植于中国丰富的文化传统之中&#xff0c;而且与现代社会的实用主义不谋而合。 中国最受欢迎的起名大师颜廷利教授&#xff0c;一…

雷士护眼大路灯值得买吗?书客、雷士、琪朗三大护眼落地灯横评实测!

雷士护眼大路灯值得买吗&#xff1f;随着生活水平的提高&#xff0c;更多的人开始关注养生和视力健康&#xff0c;而护眼大路灯因为有能够提高光线质量&#xff0c;也能用来盖上长期用眼造成眼部干涩、酸痛等症状也越来越受消费者青睐。而现在的护眼大路灯市场&#xff0c;品牌…

先导微型雕刻机XD1213创造更多可能性

打造一间现代化教育装备的校园木工创客室&#xff0c;使木工制作、创意设计、科技融合与教育实践于一体的多功能空间&#xff0c;对校园木工创客室配备一些列的木工设备和工具&#xff0c;以满足不同层次的木工制作需求。 校园木工创客室的空间布局应合理、有序&#xff0c;便于…

【鸿蒙学习笔记】关系型数据库概述

目录标题 关系型数据库的运行机制样例代码共通方法 DBUtilsIndex 代码效果 关系型数据库的运行机制 1、 关系型数据库对应用提供通用的操作接口&#xff0c;底层使用SQLite作为持久化存储引擎&#xff0c;支持SQLite具有的数据库特性&#xff0c;包括但不限于事务、索引、视图…

精密制造,光纤激光打标机在电子通讯行业的深度实践

光纤激光打标机&#xff0c;作为激光加工领域的一项先进技术&#xff0c;近年来在电子通讯行业中得到了广泛应用。它利用掺稀土元素玻璃光纤作为增益介质的激光器&#xff0c;通过光纤放大器开发出高功率密度的激光束&#xff0c;对工件表面进行精细加工&#xff0c;形成永久性…

强制升级最新系统,微软全面淘汰Win10和部分11用户

说出来可能不信&#xff0c;距离 Windows 11 正式发布已过去整整三年时间&#xff0c;按理说现在怎么也得人均 Win 11 水平了吧&#xff1f; 然而事实却是&#xff0c;三年时间过去 Win 11 占有率仅仅突破到 29%&#xff0c;也就跳起来摸 Win 10 屁股的程度。 2024 年 6 月 Wi…

Visual Studio 2022 安装及使用

一、下载及安装 VS 官网&#xff1a;Visual Studio: IDE and Code Editor for Software Developers and Teams 下载免费的社区版 得到一个.exe文件 右键安装 选择C开发&#xff0c;并修改安装位置 等待安装 点击启动 二、VS的使用 1.创建项目 打开VS&#xff0c;点击创建新项…

Ubuntu22.04安装NIVIDIA显卡驱动总结

1.首先在安装驱动时需要判断系统有无GPU以及GPU的型号 可以参考这篇文章&#xff1a; https://blog.51cto.com/u_13171517/8814753#:~:textubuntu%20%E7%B3%BB%E7%BB%9F%20%E6%80%8E%E4%B9%88%E5%88%A4%E6%96%AD%E7%B3%BB%E7%BB%9F%E6%9C%89%E6%B2%A1%E6%9C%89GPU%201%20%E6%…

批量提取PDF中表格内容

1 背景 从PDF文件获取表格中的数据&#xff0c;也是日常办公容易涉及到的一项工作。比如我们想获取某公司年报里面的表格数据&#xff0c;PDF动辄上百页的数据。 2 传统方法 一个一个从PDF表格中复制&#xff0c;然后粘贴到Excel表格中&#xff0c;效率太低了。 3 办公自动…

【OC】巧用UIStackView简化布局

UIStackView的运用 文章目录 UIStackView的运用引入UIStackView的作用UIStackView的属性compression resistance 和 huggingaxisalignmentDistributionspacing UIStackView的方法UIStackView的示例 引入 在仿写ZARA的过程之中&#xff0c;我看到软件之中是有大量的按钮排列在一…

一文带你掌握SpringMVC扩展点RequestBodyAdvice和ResponseBodyAdvice如何使用及实现原理

1.概述 Spring MVC是当今web项目系统开发后端技术框架的不二之选&#xff0c;也是Spring全家桶中非常重要的一个成员&#xff0c;它的设计思想和实现套路都是很值得我们学习的&#xff0c;所以今天我们就再来看看Spring MVC框架中预留的两个钩子也就是扩展点&#xff1a;Reque…

minio在redhat7.9上面的单节点单驱动离线安装(docker)

问题 最近需要在红帽上面离线安装minio&#xff0c;并且还是要离线安装到服务器中的Docker里面去。 检查服务器磁盘 # lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs xxxxsx-xxx-xxx…

如何基于大模型开发应用接口

一、前言 针对自然语言处理方向&#xff0c;以前要开发一个情感分析、命名实体识别之列的应用是非常麻烦的&#xff0c;我们需要完成收集数据、清理数据、构建模型、训练模型、调优模型等一系列操作&#xff0c;每一步都非常耗时。如今大语言模型&#xff08;LLM&#xff09;的…

【BUG】已解决:JsonMappingException

已解决&#xff1a;JsonMappingException 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 概述&#xff1a; 没有getter方法的实体的序列化&#xff0c;并解决Jackson引发的JsonMappingException异常。 默认情况下&#xff0c;Jackson 2只会处理公有字段或具有公有get…

RK3588部署YOLOV8-seg的问题

在使用YOLOV8-seg训练出来的pt模型转为onnx的时候&#xff0c;利用以下仓库地址转。 git clone https://github.com/airockchip/ultralytics_yolov8.git 在修改ultralytics/cfg/default.yaml中的task&#xff0c;mode为model为自己需要的内容后&#xff0c; 执行以下语句 cd …

2006-2021年 291个地级市资源错配指数、劳动和资本相对扭曲指数do文件和结果

资源错配指数&#xff1a;衡量生产要素配置效率的关键指标 资源错配指数&#xff08;Misallocation Index&#xff09;是一个衡量资源配置效率的指标&#xff0c;它反映了生产要素是否得到了合理配置&#xff0c;以及是否达到了生产效率的最优状态。一个较高的资源错配指数意味…

视图库对接系列(GA-T 1400)十六、视图库对接系列(本级)通知(订阅回调)

说明 之前我们实现了订阅接口,其中有一个receiveAddr参数, 这个就是对应的回调的地址。一般情况下对应的是同一个服务。 我们推荐使用http://xxx:xxx/VIID/SubscribeNotifications接口文档 SubscribeNotificationList对象对象如下: 文档中是xml,但实际上目前使用的都是jso…

传音控股Android一面凉经(2024)

传音控股Android一面凉经(2024) 笔者作为一名双非二本毕业7年老Android, 最近面试了不少公司, 目前已告一段落, 整理一下各家的面试问题, 打算陆续发布出来, 供有缘人参考。今天给大家带来的是《传音控股Android一面凉经(2024)》。 面试职位: Android应用开发工程师(移动互联业…