【C++】vector的基本使用

💗个人主页💗
⭐个人专栏——C++学习⭐
💫点击关注🤩一起学习C语言💯💫

目录

导读

1. vector初始化

2. vector iterator 的使用

2.1 常规遍历

2.2 rbegin + rend 反向遍历

3. vector 常见函数使用

3.1 push_back()

3.2 pop_back()

3.3 size()

3.4 empty()

3.5 at()

3.6 front() 和 back()

3.7 clear() 和 erase()

3.8 insert()

4. vector的嵌套使用


导读

今天我们来学习vector的一些基本操作。

vector是一个动态数组容器,可以存储任意类型的元素。

1. vector初始化

构造函数声明接口说明
vector()无参构造
vector(size_type n, const value_type& val = value_type())构造并初始化n个val
vector (const vector& x);拷贝构造
vector (InputIterator first, InputIterator last);使用迭代器进行初始化构造
  1. 默认构造函数:创建一个空的vector对象。
  2. 指定大小的构造函数:创建一个指定大小的vector对象,并且可以指定默认值。
  3. 拷贝构造函数:通过拷贝一个已存在的vector对象来创建一个新的vector对象。
  4. 区间构造函数:使用另一个容器的指定区间来创建一个新的vector对象。
int main()
{
	// 创建一个空的整数类型的vector对象
	vector<int> num1;

	// 创建一个包含5个整数的vector对象,默认值为0
	vector<int> num2(5); 
	// 创建一个包含5个整数的vector对象,每个元素的默认值为10
	vector<int> num3(5, 10); 

	vector<int> num4{ 10, 20, 30, 40, 50 };
	vector<int> num5(num4); // 将num4的内容拷贝给num5

	// 使用num4的前3个元素创建一个新的vector对象
	vector<int> num6(num4.begin(), num4.begin() + 3); 
	return 0;
}

2. vector iterator 的使用

2.1 常规遍历

vector提供了两种类型的迭代器:iteratorconst_iterator

iterator可以用于修改vector中的元素,而const_iterator只能用于访问但不能修改元素。

  1. 迭代器的遍历。
  2. 使用auto关键字简化迭代器声明和遍历。
  3. 使用范围for循环遍历。

begin:获取第一个数据位置的iterator/const_iterator,

end:获取最后一个数据的下一个位置 的iterator/const_iterator

int main()
{
	vector<int> numbers{ 1, 2, 3, 4, 5 };
	vector<int>::iterator iter;  // 创建一个可修改的迭代器
	vector<int>::const_iterator citer;  // 创建一个不可修改的迭代器


	//迭代器的遍历
	for (iter = numbers.begin(); iter != numbers.end(); ++iter) 
	{
		// 使用iter访问当前元素
		std::cout << *iter << " ";
	}
	cout << endl;

	//使用auto关键字简化迭代器声明和遍历
	for (auto iter = numbers.begin(); iter != numbers.end(); ++iter) 
	{
		// 使用iter访问当前元素
		std::cout << *iter << " ";
	}
	cout << endl;

	//使用范围for循环遍历
	for (auto num : numbers) {
		// 使用num访问当前元素
		std::cout << num << " ";
	}
	cout << endl;

	return 0;
}

 

2.2 rbegin + rend 反向遍历

rbegin()rend()是两个成员函数,用于返回一个反向迭代器,分别指向vector中最后一个元素和第一个元素之前的位置。这对应于反向遍历vector的需求。

int main() 
{
    vector<int> numbers{ 10, 20, 30, 40, 50 };

    // 使用rbegin()和rend()进行反向遍历
    cout << "Reverse traversal using rbegin() and rend(): ";
    for (auto it = numbers.rbegin(); it != numbers.rend(); ++it) 
    {
        cout << *it << " ";
    }
    cout << endl;

    return 0;
}

 

3. vector 常见函数使用

3.1 push_back()

vector的末尾添加一个元素。

int main()
{
	vector<int> num{ 10, 20, 30, 40, 50 };
	num.push_back(60);
	num.push_back(70);

	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

3.2 pop_back()

vector的末尾删除一个元素。

int main()
{
	vector<int> num{ 10, 20, 30, 40, 50 };
	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;

	num.pop_back();
	num.pop_back();

	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

3.3 size()

返回vector中的元素数量。

int main()
{
	vector<int> num{ 10, 20, 30, 40, 50 };
	cout << num.size() << endl;
	return 0;
}

3.4 empty()

检查vector是否为空,返回一个布尔值。

int main()
{
	vector<int> numbers;
	if (numbers.empty()) {
		cout << "The vector is empty"<<endl;
	}
	return 0;
}

3.5 at()

访问vector中指定位置的元素,可以使用索引或迭代器。

int main()
{
	vector<int> num{ 10, 20, 30, 40, 50 };
	cout << num.at(1) << endl;
	return 0;
}

3.6 front() 和 back()

  1. front:返回vector中第一个元素的引用。
  2. back:返回vector中最后一个元素的引用。
int main()
{
	vector<int> num{ 10, 20, 30, 40, 50 };
	cout << num.front() << endl;
	cout << num.back() << endl;

	return 0;
}

3.7 clear() 和 erase()

  1. clear:清空vector中的所有元素。
  2. erase:删除vector中指定位置的元素,可以使用索引或迭代器。
int main()
{
	vector<int> num{ 10, 20, 30, 40, 50 };
	num.erase(num.begin() + 1);  // 删除第二个元素
	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;

	num.clear();
	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

3.8 insert()

vector指定位置插入一个或多个元素,可以使用索引或迭代器。

int main()
{
	vector<int> num{ 10, 20, 30, 40, 50 };
	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;

	// 在第二个位置插入15
	num.insert(num.begin() + 1, 15);  
	for (auto e : num)
	{
		cout << e << " ";
	}
	cout << endl;
	return 0;
}

4. vector的嵌套使用

vector可以嵌套在其他vector中,形成多维的数据结构。这种嵌套的vector结构可以用于表示二维矩阵、多维数组等数据结构。

int main() 
{
    // 定义数组的大小
    int rows = 3;
    int cols = 4;

    // 创建一个二维vector
    vector<vector<int>> matrix(rows, vector<int>(cols));

    // 对二维vector进行赋值
    int count = 1;
    for (int i = 0; i < rows; i++) 
    {
        for (int j = 0; j < cols; j++) 
        {
            matrix[i][j] = count++;
        }
    }

    // 打印二维vector的内容
    for (int i = 0; i < rows; i++) 
    {
        for (int j = 0; j < cols; j++) 
        {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

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

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

相关文章

N1912A P 系列双通道功率计

N1912A 双通道功率计 产品综述 <<<P 系列双通道功率计>>> Keysight N1912A P 系列双通道功率计可以提供峰值功率、峰均比、平均功率、上升时间、下降时间 NS 脉冲宽度测量。 “ 功能特点 30 MHz 视频带宽 能够以高达 100 MSa/s 的采样率执行单次实时捕…

全新交友盲盒+付费进群二合一源码 包含全套源码+教程

盲盒交友脱单系统源码&#xff0c;带教程&#xff0c;免授权这套源码已经替你们搭建测试过了 附带进群系统&#xff0c;定位是正常的 申明需要无限回调&#xff0c;没有回调的搭建出来不能用不要说源码不能用 全新系统方便大家使用&#xff0c;已经录制好详细的教程&#xf…

AIGC 007-E4T基于编码器的域调优用于文本到图像模型的快速个性化!

AIGC 007-E4T基于编码器的域调优用于文本到图像模型的快速个性化&#xff01; 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 这篇论文提出了一种使用领域特定编码器来快速将文本到图像模型适配到新领域的方案。这种被称为基于编码器的领域微调 (E4T) 的方法&#xff0c;专…

不怕YOLOv10高歌猛进,我有YOLOv8稳扎稳打

YOLOv10 出来有几天时间了&#xff0c;这次我没有选择第一时间出文章解析&#xff0c;如此频繁的发布数字版本的 YOLO 着实让人头疼&#xff0c;虽然数字的更新并非旧版技术的过时&#xff0c; 但是这肯定会让很多在校同学增加很多焦虑情绪。这里还是请大家辩证看待。 v10 这次…

C语言编译链接

翻译环境和运行环境 翻译环境 翻译环境就是在这将源代码转换成可执行的二进制指令&#xff08;机器指令&#xff09;。 进行编译和链接过程。 .c源程序先单独经过编译器生成对应的目标文件.obj&#xff08;在windows环境下&#xff09;.o&#xff08;在Linux环境下&#xff…

CRMEB开源商城系统:全开源、高灵活性的电商解决方案

一、引言 随着电子商务的飞速发展&#xff0c;越来越多的企业和个人开始关注如何快速搭建一个稳定、高效且功能丰富的在线商城系统。在这样的背景下&#xff0c;CRMEB开源商城系统应运而生&#xff0c;凭借其前后端分离的架构、丰富的功能模块以及易用性&#xff0c;成为了众多…

C++模板——非类型模板参数、模板的特化以及模板的分离编译

目录 非类型模板参数 模板的特化 概念 函数模板特化 类模板特化 全特化 偏特化 模板的分离编译 什么是分离编译 模板的分离编译 解决方法 模板总结 非类型模板参数 模板参数可分为类型形参和非类型形参。类型形参&#xff1a; 出现在模板参数列表中&#xff0c;跟…

【python】删除一个列表中的所有的1

删除所有的1 x [1, 1, 6, 3, 9, 4, 5, 1, 1, 2, 1, 9, 6, 4] 使用lambda函数和filter来过滤掉x中的1 filtered_x list(filter(lambda n: n ! 1, x)) 不是1的数字&#xff0c;存进x列表&#xff0c;filter用于插入元素到第二个位置 print(filtered_x) # 输出: [6, 3, 9, …

第13章 层次式架构设计理论与实践

层次式架构的核心思想是将系统组成为一种层次结构&#xff0c;每一层为上层服务&#xff0c;并作为下层客户。其实不管是分层还是其他的架构都是为了解耦&#xff0c;更好的复用&#xff0c;只要秉承着这种思想去理解一切都迎刃而解了。 13.1 层次上体系结构概述 回顾一下软件…

【docker】安装harbor出现问题: Running 1/1 ✘ Network harbor_harbor Error

安装harbor出现问题&#xff1a; [] Running 1/1 ✘ Network harbor_harbor Error 0.2s failed to create network harbor_harbor: Error response from daemon: Fa…

节水“云”科普丨北京昌平VR节水云展馆精彩上线

2024年5月15日上午&#xff0c;由北京昌平区水务局主办的“推进城市节水&#xff0c;建设美丽昌平——2024年全国城市节约用水宣传周暨‘坚持节水优先 树立节水标杆’昌平节水在行动主题实践活动”隆重举办&#xff0c;活动期间&#xff0c;昌平区水务局应用VR虚拟现实技术创新…

目标检测数据集 - 工地工人安全设备佩戴检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;工地工人安全设备佩戴检测数据集&#xff0c;真实场景数据生成增强后高质量图片数据&#xff0c;涉及场景丰富&#xff0c;比如楼宇建筑工地工人作业数据、道路建筑工地工人作业数据、室内工地工人作业数据、露天挖掘场景工人作业数据、工地工人自拍摆拍…

【数据分析】Numpy和Pandas库基本用法及实例--基于Japyter notebook实现

各位大佬好 &#xff0c;这里是阿川的博客 &#xff0c; 祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 承接上篇的博客 数据分析—技术栈和开发环境搭…

使用Java 读取PDF表格数据并保存到TXT或Excel

目录 导入相关Java库 Java读取PDF表格数据并保存到TXT Java读取PDF表格数据并保存到Excel 在日常工作中&#xff0c;我们经常需要处理来自各种来源的数据。其中&#xff0c;PDF 文件是常见的数据来源之一。这类文件通常包含丰富的信息&#xff0c;其中可能包含重要的表格数据…

大数据面试题 —— Hive

目录 Hive 是什么为什么要使用 HiveHive 的优缺点Hive的实现逻辑&#xff0c;为什么处理小表延迟比较高你可以说一下 HQL 转换为 MR 的任务流程吗 ***你可以说一下 hive 的元数据保存在哪里吗 ***Hive与传统数据库之间的区别Hive内部表和外部表的区别 ***hive 动态分区与静态分…

28 Debian如何配置PXE网络装机(全自动无人值守)

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置PXE网络装机(全自动无人值守) 《傅老师Debian小知识库系列之28》——原创 ==前言== 傅老师Debian小知识库特点: 1、最小化拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成…

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版

Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版 Rocky Linux 由 CentOS 项目的创始人 Gregory Kurtzer 领导 请访问原文链接&#xff1a;Rocky Linux 9.4 正式版发布 - RHEL 100% 1:1 兼容免费发行版&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处…

登录记住密码背景颜色修改

1&#xff0c;在login.vue中&:-webkit-autofill里面的css替换成如下 &:-webkit-autofill {box-shadow: 0 0 0px 1000px $bg inset !important;-webkit-text-fill-color: $cursor !important;}

Postman实现批量发送json请求

最近有一个场景&#xff0c;需要本地批量调用某个接口&#xff0c;从文件中读取每次请求的请求体&#xff0c;实现方法记录一下。 1.读取请求体 在 Postman 中&#xff0c;如果你想在 Pre-request Script 阶段读取文件内容&#xff0c;比如为了将文件内容作为请求的一部分发送…

易查分小程序 学生成绩管理小程序

亲爱的老师们&#xff0c;是不是每次成绩公布后&#xff0c;家长们的连环夺命call让你头大&#xff1f;担心孩子们的成绩信息安全&#xff0c;又想快速分享给家长&#xff0c;这可咋整&#xff1f;别急&#xff0c;易查分小程序来帮忙啦&#xff01; 安全有保障 智能验证码&a…