C++ vector

标准库类型 vector 表示对象的集合,其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引,所应用于访问对象。因为引用不是对象,所以不包含引用的 vector 。组成 vector 的元素可以是 vector 。

vector 是一个类模板。vector 是模板而非类型,由 vector 生成的类型必须包含 vector 中元素的类型【vector<类型>】。

头文件

#include<vector>

using std::vector;

定义和初始化 vector 对象

直接初始化的适用情况

  • 初始值已知且数量较少
  • 初始值是另一个vector对象的副本
  • 所有元素的初始值都一样

两个 vector 对象的类型必须相同。

列表初始化 vector 对象

vector<T> v = {a,b,c,...};

特殊要求

  • 使用拷贝初始化时(即使用=时),只能提供一个初始值
  • 如果提供的是一个类内初始值,只能使用拷贝初始化或使用花括号的形式初始化
  • 如果提供的是初始元素值的列表,只能把初始值放在花括号里进行初始化,不能放在圆括号里

指定数量的元素

可用 vector 对象容纳的元素数量和所有元素的统一初始值初始化 vector 对象。

vector<T> v(n,val);

值初始化

可只提供 vector 对象容纳的元素数量而省略初始值,此时库创建一个值初始化的元素初值,并赋给容器中的所有元素,该初值由 vector 对象中元素的类型决定。

若元素是内置类型,如int,元素初始值自动设为0;若元素是某种类类型,如string,则元素由默认初始化。

vector<int> ivec(10);// 10个元素,每个都初始化为0

vector<string> svec(10);// 10个元素,每个都是空 string 对象

特殊要求

  • 有些类要求必须明确地提供初始值,如果vector对象中元素的类型不支持默认初始化,必须为其提供初始的元素值。对该类型来说,只提供元素的数量不设定初始值无法完成初始化工作。
  • 若只提供元素的数量没有设定初始值,只能使用直接初始化。

列表初始值还是元素数量

vector<int> v1(10);// v1有10个元素,每个元素的值为0

vector<int> v2{10};// v2有1个元素,该元素值为10

vector<int> v3(10,1);// v3有10个元素,每个元素的值为1

vector<int> v4{10,1};// v4有2个元素,元素值分别为10和1

使用圆括号,提供的值是用来构造vector对象的;使用花括号,可描述成列表初始化该vector对象,初始化过程会尽可能地把花括号内的值当成元素初始值的列表处理,只有无法执行列表初始化时才考虑其他初始化方式。

若初始化时使用花括号的形式,但是提供的值不能使用列表初始化,会考虑用该值构造vector对象。列表初始化vector对象,花括号的值必须与元素类型相同。

vector<string> v5{"hi"};// 列表初始化:v5有一个元素

vector<string> v6("hi");// 错误,不能使用字符串字面值构建vector对象

vector<string> v7{10};// v7有10个默认初始化的元素

vector<string> v8{10,"hi"};// v8有10个值为"hi"的元素

vector 操作

向vector对象中添加元素

创建一个空vector,在运行时再利用vector的成员函数 push_back 向其中添加元素。push_back 负责把一个值当成 vector 对象的伪元素“压到”vector 对象的“尾端”。若直到运行时才能知道vector对象中元素的确切个数,也可使用该方法。

vector<int> v;

for(int i = 0; i != 100; ++i)

v.push_back(i);

string word;

vector<string> text;

while(cin>>word){

text.push_back(word);

}

vector 对象能高效增长,能在运行时快速地添加元素。虽然如此,但是如果不在定义 vector 对象时设定其大小,性能可能更差(当所有元素的值都一样时例外)。元素的值有所不同时,有效的方法是先定义一个空的 vector 对象,再在运行时向其中添加具体值。

向 vector 对象添加元素蕴含的编程假定

  • 必须确保所写的循环正确无误,特别是在循环有可能改变 vector 对象容量的时候。
  • 若循环体内部包含有向 vector 对象添加元素的语句,不能使用范围 for 循环。

size

返回 vector 对象中元素的个数,返回值的类型是由 vector 定义的 size_type 类型。

使用 size_type ,需首先指定其是哪种类型定义的,vector 对象的类型总是包含着元素的类型。

vector<int>::size_type

关系运算符、相等运算符

两个 vector 对象相等当且仅当它们所含的元素个数相同,而且对应位置的元素值也相同。

关系元素符依照字典顺序进行比较:如果两个 vector 对象的容量不同,但是在相同位置上的元素值都一样,则元素较少的 vector 对象小于元素较多的 vector 对象;若元素的值有区别,则 vector 对象的大小关系由第一对相异的元素值的大小关系决定。只有当元素的值可能比较时,vector 对象才能被比较【Sales_item 类不支持相等性判断和关系运算等操作,不能比较两个 vector<Sales_item>对象】。

下标

下标从 0 开始记,下标类型是相应的 size_type 类型。

使用下标运算符可以获取到指定的元素。可通过计算得到 vector 内对象的索引,进而直接获取索引位置上的元素。

只要 vector 对象不是一个常量,可以向下标运算符返回的元素赋值。

不能使用下标形式添加元素。当有一个空的 vector 对象时,根本不包含任何元素,就不能通过下标去访问任何元素。

下标运算符可用于访问已存在的元素,不能用于添加元素,且只能对确知已存在的元素执行下标操作。

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

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

相关文章

谷歌云的利润增长才刚刚开始

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 总结&#xff1a; &#xff08;1&#xff09;自从Google Cloud(谷歌云&#xff09;今年开始盈利以来&#xff0c;投资者都在怀疑这种盈利能力能否持续下去。 &#xff08;2&#xff09;虽然微软Azure目前在全球的人工智能竞…

【网安大模型专题10.19】论文6:Java漏洞自动修复+数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会

How Effective Are Neural Networks for Fixing Security Vulnerabilities 写在最前面摘要贡献发现 介绍背景&#xff1a;漏洞修复需求和Java漏洞修复方向动机方法贡献 数据集先前的数据集和Java漏洞Benchmark数据集扩展要求数据处理工作最终数据集 VJBenchVJBench 与 Vul4J 的…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(六):一个AWTK工程

一个AWTK工程基于C/C++编写,可以分为如下几步: 结合下图,看懂启动的部分。一般一个AWTK工程,需要实现哪些部分,就是其中开始之后白色的部分,比如调用main函数和gui_app_start时会做一些操作,比如asset_init和application_init时要做一些设置,还有退出的函数application…

《计算机视觉中的多视图几何》笔记(14)

14 Affine Epipolar Geometry 本章主要是在仿射摄像机的情况下重新考虑对极几何&#xff0c;也就是仿射对极几何。 仿射摄像机的优点是它是线性的&#xff0c;所以很多最优化算法可以用线性代数的知识解决。如果是一般的投影摄像机&#xff0c;很多算法就不是线性的了&#x…

1997-2017年各省能源投入数据(万吨标准煤)

1997-2017年各省能源投入数据&#xff08;万吨标准煤&#xff09; 1、时间&#xff1a;1997-2017年 2、来源&#xff1a;中国统计年鉴 3、范围&#xff1a;30个省 4、指标&#xff1a;能源投入&#xff08;各省8种能源消费总量计算得出&#xff09;&#xff08;万吨标准煤&…

【单元测试】--高级主题

一、模拟与存根深入 在单元测试中&#xff0c;模拟&#xff08;Mock&#xff09;和存根&#xff08;Stub&#xff09;是两种常用的测试替代品&#xff0c;用于模拟外部依赖或模拟特定行为&#xff0c;以便测试能够独立运行。以下是深入了解模拟与存根的概念&#xff0c;以NUni…

10-类加载器

类加载器 类与类加载器 判断类是否“相等” 任意一个类&#xff0c;都由加载它的类加载器和这个类本身一同确立其在 Java 虚拟机中的唯一性&#xff0c;每一个类加载器&#xff0c;都有一个独立的类名称空间。 因此&#xff0c;比较两个类是否“相等”&#xff0c;只有在这…

浅析人脸活体检测技术的功能及几种分类

在日常生活工作中&#xff0c;出现了人脸验证、人脸支付、人脸乘梯、人脸门禁等等常见的应用场景。这说明人脸识别技术已经在门禁安防、金融行业、教育医疗等领域被广泛地应用&#xff0c;人脸识别技术的高速发展与应用同时也出现不少质疑。其中之一就是人脸识别很容易被照片、…

【微信小程序】数字化会议OA系统之投票模块(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…

信息检索与数据挖掘 | (五)文档评分、词项权重计算及向量空间模型

目录 &#x1f4da;词项频率及权重计算 &#x1f407;词项频率 &#x1f407;逆文档频率 &#x1f407;tf-idf权重计算 &#x1f4da;向量空间模型 &#x1f407;余弦相似度 &#x1f407;查询向量 &#x1f407;向量相似度计算 &#x1f4da;其他tf-idf权值计算方法 …

asp.net网上商城系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio协同过滤设计

一、源码特点 asp.net网上商城系统是一套完善的web设计管理系统系统采用协同过滤算法进行商品推荐&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库 为sqlserver2008&#xff0c;使用c#语言开发 ASP…

机器学习之ROC与AUC

文章目录 定义ROC曲线&#xff1a;AUC&#xff08;Area Under the ROC Curve&#xff09;&#xff1a; 定义 ROC&#xff08;Receiver Operating Characteristic&#xff09;曲线和AUC&#xff08;Area Under the ROC Curve&#xff09;是用于评估二分类模型性能的重要工具。 …

C++前缀和算法的应用:摘水果 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 在一个无限的 x 坐标轴上&#xff0c;有许多水果分布在其中某些位置。给你一个二维整数数组 fruits &#xff0c;其中 fruits[i] [positioni, amounti] 表示共…

服务容错框架Sentinel入门

概述 Sentinel&#xff0c;阿里开源的一套用于服务容错的综合性解决方案。它以流量为切入点&#xff0c;从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。分布式系统的流量防卫兵。 特征: 丰富的应用场景&#xff1a;秒杀&#xff08;即突发流量控制在系统…

CI/CD:GitLab-CI 自动化集成/部署 JAVA微服务的应用合集

CI/CD&#xff1a;GitLab-CI 自动化集成/部署 JAVA微服务的应用合集 CI/CD&#xff1a;GitLab-CI 自动化集成/部署 JAVA微服务的应用合集安装DockerGitLabGitLab-Runner阿里云容器仓库 GitLab-CIJava微服务的GitLab-CI应用 CI/CD&#xff1a;GitLab-CI 自动化集成/部署 JAVA微服…

工控安全与网络安全有什么不同?

在当代&#xff0c;全球制造业正在经历一场前所未有的技术变革。工业4.0不仅代表着自动化和数据交换的进步&#xff0c;它还揭示了工业自动化、智能制造与系统集成的融合。这种集成为企业带来了效率和质量的双重提升&#xff0c;但同时也暴露出新的安全隐患。工控系统成为了这一…

磁盘分区如何分? 电脑磁盘分区免费软件指南!

列出并比较顶级免费磁盘分区管理器软件&#xff0c;以选择适用于 Windows 的最佳分区软件&#xff1a; 系统分区在现代计算机设备中起着非常重要的作用。它们可以存储数据&#xff0c;使系统文件远离用户数据&#xff0c;并在同一台设备上安装多个操作系统。但是&#xff0c;这…

单源最短路径 -- Dijkstra

Dijkstra算法就适用于解决带权重的有向图上的单源最短路径问题 -- 同时算法要求图中所有边的权重非负&#xff08;这个很重要&#xff09; 针对一个带权有向图G &#xff0c; 将所有节点分为两组S和Q &#xff0c; S是已经确定的最短路径的节点集合&#xff0c;在初始时为空&…

ts | js | 爬虫小公举分享

Curl转Code 快速将curl转为各种语言的代码; 便于提取请求头之类, 或者微改直接使用 https://curlconverter.com/node-axios/ (有点慢, 但是很全)https://www.lddgo.net/convert/curl-to-code (没有axios, 我喜欢用axios) 使用… 抓取地址, 使用浏览器或者其他抓包工具都可, 这…

[SQL开发笔记]BETWEEN操作符:选取介于两个值之间的数据范围内的值

一、功能描述&#xff1a; BETWEEN操作符&#xff1a;选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。 二、BETWEEN操作符语法详解&#xff1a; BETWEEN操作符语法&#xff1a; SELECT column1, column2,…FROM table_nameWHERE column BETWEEN val…