蓝桥杯-常用STL(一)

常用STL

  • 🎈1.动态数组
  • 🎈2.vector的基础使用
    • 🔭2.1引入库
    • 🔭2.2构造一个动态数组
    • 🔭2.3插入元素
    • 🔭2.4获取长度并且访问元素
    • 🔭2.5修改元素
    • 🔭2.6删除元素
    • 🔭2.7清空
  • 🎈3.vector的基础应用
    • 🔭3.1例题一
  • 🎈4.用动态数组存储自定义数据
    • 🔭4.1二维的动态数组

🎈1.动态数组

🔎有些时候想开一个数组,但是却不知道要开多大长度的数组合适,因此我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,但是C++里面有已经写好的标准模板库(Standard Template Library),也就是我们常说的STL库,实现了集合、映射表、栈、队列等数据结构和排序、查找等算法。我们可以很方便的调用标准库来减少我们的代码量。C++中动态数组写作vector

🎈2.vector的基础使用

🔭2.1引入库

引入库:C++vector的实现是在一个<vector>头文件中,在代码的开头引入这个头文件,并在引入所有头文件之后加上一句using namespace std;

#include <vector>
using namespace std;
int main()
{
	return 0;
}

🔭2.2构造一个动态数组

构造一个动态数组:C++中直接构造出一个vector的语句为:vector<T>vec.这样我们定义了一个名为vec的储存T类型数据的动态数组。其中T是我们数组要储存的数据类型,可以是int、float、double、或其他自定义的数据类型等等。初始的时候vec是空的。比如vector<int>a定义了一个储存整数的动态数组a.

🔭2.3插入元素

C++中通过push_back()方法在数组最后面插入一个新的元素。

#include <vector>
using namespace std;
int main()
{
	vector<int> vec;//[]
	vec.push_back(1);//[1]
	vec.push_back(2);//[1,2]
	vec.push_back(3);//[1,2,3]
	return 0;
}

🔭2.4获取长度并且访问元素

C++中通过size()方法获取vector的长度,通过[]操作直接访问vector中的元素,这一点和数组是一样的。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<int> vec;//[]
	vec.push_back(1);//[1]
	vec.push_back(2);//[1,2]
	vec.push_back(3);//[1,2,3]
	for (int i = 0; i < vec.size(); i++)
	{
		cout << vec[i] << endl;
	}
	return 0;
}

在这里插入图片描述

🔭2.5修改元素

C++中修改vector中的某个元素很简单,只需要用=给它赋值就好了。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<int> vec;//[]
	vec.push_back(1);//[1]
	vec.push_back(2);//[1,2]
	vec.push_back(3);//[1,2,3]
	vec[1] = 3;//[1,3,3]
	vec[2] = 2;//[1,3,2]
	for (int i = 0; i < vec.size(); i++)
	{
		cout << vec[i] << endl;
	}
	return 0;
}

在这里插入图片描述

🔭2.6删除元素

和插入一样,删除元素也只能在动态数组的末端进行操作。C++中通过pop_back()方法删除动态数组的最后一个元素。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<int> vec;//[]
	vec.push_back(1);//[1]
	vec.push_back(2);//[1,2]
	vec.push_back(3);//[1,2,3]
	vec.pop_back();//[1,2]
	vec.pop_back();//[1]
	return 0;
}

🔭2.7清空

C++中只需要调用clear()方法就可以清空vector
C++vectorclear()只是清空vector,并不会清空开的内存。用一种方法可以清空vector的内存:vector<int>().swap(v);

🎈3.vector的基础应用

🔭3.1例题一

🔎题目:将1-10的平方依次存储到刚才定义的vector里面。这里我们需要借助一个循环来完成,循环枚举1到10,并且将这些值输出。

🏆算法

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<int> v;
	for (int i = 1; i <= 10; i++)
	{
		v.push_back(i * i);
	}
	for (int i = 0; i < v.size(); i++)
	{
		cout << v[i] << " ";
	}
	cout << endl;
	return 0;
}

在这里插入图片描述

🎈4.用动态数组存储自定义数据

✅动态数组不仅仅可以储存基本的数据类型,还能储存自定义数据类型,比如结构体。

#include <iostream>
#include <vector>
using namespace std;
struct Student
{
	string name;
	int age;
};
int main()
{
	vector<Student> class1;
	Student stu1, stu2;
	stu1.name = "ZHANGSAN";
	stu1.age = 18; 
	stu2.name = "LISI";
	stu2.age = 19;
	class1.push_back(stu1);
	class1.push_back(stu2);
	return 0;
}

🔭通过上面的学习,我们知道可以通过push_back()来向动态数组添加一个元素。如果我们需要一个长度为n的,全是1的动态数组。我们可以像下面这样写:

int n = 10;
vector<int> vec;
for (int i = 0; i < n; i++)
{
	vec.push_back(1);
}

✅其实,我们可以通过一个构造函数快速构建这样的一个动态数组。所谓构造函数,就是在我们定义一个对象的时候,可以赋予初始值。

int n = 10;
vector<int> vec(n,1);

上面的代码,我们定义了一个vector的时候,调用构造函数,第一个参数表示初识的动态数组的长度,第二个参数表示初识数组里面每个元素的值。如果不传入第二个参数,那么初始值都是0
:上面用的构造函数的写法和用循环是等价的,通过合理的使用构造函数,可以减少代码量。

🔭4.1二维的动态数组

✅我们都知道,数组可以开二维的,那么动态数组能用二维的吗?答案是肯定的,动态数组也支持二维的。vector<vector<int> >vec2,这样就定义了一个二维的动态数组。注意:<int> >中间有一个空格,这个空格一定要加上,否则在一些老版的编译器上将不能通过编译。
🔎通过上面的方法定义的二维数组,每一维都是空的,我们必须要一维一维的赋值。比如我们规定第一维的大小是n

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n = 5;
	vector<vector<int> >vec2;
	for (int i = 0; i < n; i++)
	{
		vector<int> x(i + 1, 1);
		vec2.push_back(x);
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < vec2[i].size(); j++)
		{
			cout << vec2[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl;
	return 0;
}

在这里插入图片描述
✅二维动态数组的每一维的长度都可以不一样,可以是任意形状的,借助构造函,我们可以快速构造一个n行m列的动态数组,每个元素的初始值是0vector<vector<int> >vec2(n,vector<int>(m,0))
🏆这里我们尝试定义一个二维的储存整数的动态数组v2d,接下来我们给第一维赋值,第一维的大小为5,每个元素是一个一维的vector。我们这里通过vector<int>()快速构造一个一维的vector。试写出11=1~55=25的乘法表。

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	vector<vector<int> >v2d;
	for (int i = 0; i < 5; i++)
	{
		v2d.push_back(vector<int>());
	}
	for (int i = 0; i < v2d.size(); i++)
	{
		for (int j = 0; j <= i; j++)
		{
			v2d[i].push_back((i + 1) * (j + 1));
		}
	}
	for (int i = 0; i < v2d.size(); i++)
	{
		for (int j = 0; j < v2d[i].size(); j++)
		{
			cout << i + 1 << " * " << j + 1 << " = " << v2d[i][j] << "\t";
		}
		cout << endl;
	}
	return 0;
}

在这里插入图片描述

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

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

相关文章

Redis核心技术与实战【学习笔记】 - 8.Redis 时间序列数据处理

在做 web 产品是&#xff0c;都会有这么一个需求&#xff1a; 记录用户在网站或 APP 上的点击行为数据&#xff0c;来分析用户行为。这里的数据一般包括用户 ID、行为类型&#xff08;如浏览、登录、下单等&#xff09;、行为发生的时间戳。 userID, type, timeStamp 与之类似&…

Prometheus的pod部署

创建命名空间和账户以及集群账户 kubectl create ns monitor-sa kubectl create serviceaccount monitor -n monitor-sa kubectl create clusterrolebinding monitor-clusterrolebinding -n monitor-sa --clusterrolecluster-admin --serviceaccountmonitor-sa:monitor 创建…

视网膜长尾数据

视网膜长尾数据 问题&#xff1a;视网膜疾病分类&#xff0c;解法&#xff1a;深度学习模型问题&#xff1a;数据复杂性处理&#xff0c;解法&#xff1a;多任务框架&#xff08;同时处理多种疾病&#xff09;和少量样本学习&#xff08;提高对罕见疾病的识别&#xff09;问题&…

找不到MSVCR120.dll,缺失MSVCR120.dll的多种解决方法

当计算机系统在运行过程中无法找到MSVCR120.dll这个特定的动态链接库文件时&#xff0c;可能会引发一系列问题和异常情况。首先&#xff0c;这可能导致某些应用程序无法正常启动或运行&#xff0c;因为MSVCR120.dll是许多基于Microsoft Visual C编译的应用程序所必需的核心组件…

Inventor 2024下载安装教程,免费使用,附安装包和工具,流程简单,小白也能轻松搞定

前言 Inventor是一款专业的三维可视化实体建模软件&#xff0c;Inventor.主要用于各类二维机械制图、三维制图的设计和开发等操作&#xff0c;可以广泛地应用于零件设计、钣金设计、装配设计等领域。 准备工作 1、Win7及以上系统 2、提前准备好 Inventor 2024 安装包 没有…

开源项目TARZAN-NAV | 基于springboot的现代化导航网站系统

TARZAN-NAV 导航网站 一个基于 Spring Boot、MyBatis-Plus、h2database、ehcache、Docker、websocket等技术栈实现的导航网站系统&#xff0c;采用主流的互联网技术架构、全新的UI设计、支持一键源码部署&#xff0c;拥有完整的仪表板、导航管理&#xff0c;用户管理、评论管理…

产品经理的发展方向是什么?市场需求现状如何?未来有哪些趋势?作为产品经理应该如何准备?

目录 了解产品经理的发展方向 市场需求现状 未来有那些趋势&#xff1f; 作为产品经理应该作何准备? 了解产品经理的发展方向 市场需求现状 未来有那些趋势&#xff1f; 个人软件 &#xff1a;智能终端&#xff0c;轻量化应用&#xff0c;虚拟社交等企业软件&#xff1a…

JAVA双列集合Map的特点

一次存一对元素&#xff0c;分别是 键 和 值&#xff0c;他们是一 一对应的&#xff1a;其中&#xff1a;键不可以重复&#xff0c;值可以重复这一对数据叫键值对、键值对对象、或 Entry Map 的体系结构&#xff1a; Map的常见API&#xff1a; 方式的实现&#xff1a;注意 Map …

ElasticSearch7.7.1集群搭建 Kibana安装

前言 Elasticsearch&#xff08;ES&#xff09;是一个基于Apache Lucene的分布式、高扩展、近实时的搜索引擎&#xff0c;主要用于海量数据快速存储、实时检索、高效分析的场景。通过简单易用的RESTful API&#xff0c;Elasticsearch隐藏了Lucene的复杂性&#xff0c;使得全文搜…

86.网游逆向分析与插件开发-物品使用-物品丢弃的逆向分析与C++代码的封装

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;物品使用的逆向分析与C代码的封装-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;7563f86877c…

JVM-类的生命周期

类的生命周期概述 类的生命周期描述了一个类加载、使用、卸载的整个过程。整体可以分为&#xff1a; 加载 连接&#xff0c;其中又分为验证、准备、解析三个子阶段 初始化 使用 卸载 加载阶段 加载(Loading)阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方…

c++|类和对象(下)

一、再谈构造函数 1.1初始化列表 在上一章节中&#xff0c;对于类我们可以形象的比喻为房子的图纸&#xff0c;而真正对于类的初始化可以比喻为建造了一个实体房子&#xff0c;即创建对象&#xff0c;对于房子中的各个房间都有特定的位置构造&#xff0c;那么对于类中的成员变…

一张图搞清楚HTTP状态码

HTTP状态码的基本概念 在客户端和服务器连接交互的时候&#xff0c;一般是客户端先给服务器发送请求&#xff0c;然后服务器返回结果。客户端和服务器之间的交互非常频繁&#xff0c;涉及到很多种不同类型的操作&#xff0c;大多数的时候服务器能成功返回结果&#xff0c;有时…

DC-磁盘配额(23国赛真题)

2023全国职业院校技能大赛网络系统管理赛项–模块B&#xff1a;服务部署&#xff08;WindowServer2022&#xff09; 文章目录 DC-磁盘配额题目配置步骤验证查看DC2驱动器C:\的磁盘配额&#xff0c;限制磁盘空间&#xff0c;警告等级等配置 DC-磁盘配额 题目 在DC2驱动器C:\上…

全新魅思V20正规视频影视系统源码/APP+H5视频影视源码

全新魅思V20正规视频影视系统源码&#xff0c;APPH5视频影视源码。会员花费三千购入的&#xff0c;具体搭建教程放压缩包了&#xff01; 有兴趣的下载自行研究吧&#xff0c;搭建一共要用到3个域名&#xff0c;可以拿二级域名搭建。

PMP重考流程与费用

很多参加PMP考试的考生都经历过辛勤的学习过程&#xff0c;特别是那些在毕业几年后才开始备考的人。对大多数人来说&#xff0c;PMP考试都是一项艰难的任务。尽管PMP考试的平均通过率超过90%&#xff0c;但仍然有些人无法在首次尝试中通过考试。那么&#xff0c;如果一次没有通…

Linux ---- Shell编程之正则表达式

一、正则表达式 ​ 由一类特殊字符及文本字符所编写的模式&#xff0c;其中有些字符&#xff08;元字符&#xff09;不表示字符字面意义&#xff0c;而表示控制或通配的功能&#xff0c;类似于增强版的通配符功能&#xff0c;但与通配符不同&#xff0c;通配符功能是用…

Apache POI 处理excel文件 记录用法

Apache POI 写excel public static void write() throws IOException {//再内存中创建了一个Excel文件XSSFWorkbook excel new XSSFWorkbook();//创建一个sheet页XSSFSheet sheet excel.createSheet("info");//这里创建行对象,这里的rownum 是从0开始的,类似于数…

Redis学习——高级篇①

Redis学习——高级篇① Redis7高级之单线程和多线程&#xff08;一&#xff09; 一、Redis单线程VS多线程1.Redis的单线程部分1.1 Redis为什么是单线程&#xff1f;1.2 Redis所谓的“单线程”1.3 Redis演进变化1.3.1 Redis 3.x 单线程时代性能很快的原因1.3.2…

Python处理图片生成天际线(2024.1.29)

1、天际线简介 天际线&#xff08;SkyLine&#xff09;顾名思义就是天空与地面的边界线&#xff0c;人站在不同的高度&#xff0c;会看到不同的景色和地平线&#xff0c;天空与地面建筑物分离的标记线&#xff0c;不得不说&#xff0c;每天抬头仰望天空&#xff0c;相信大家都可…