蓝桥杯-常用STL(一)

news2024/11/15 8:41:49

常用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;
}

在这里插入图片描述

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

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

相关文章

抽象类(Java)、模板方法设计模式

一、概念 在Java中有abstract关键字&#xff0c;就是抽象的意思&#xff0c;可用来修饰类和成员方法。 用abstract来修饰类&#xff0c;那这个类就是抽象类&#xff1b;修饰方法&#xff0c;那这个方法就是抽象方法。 修饰符 abstract class 类名{修饰符 abstract 返回值类型…

知识库是什么 产品经理必须知道的行业知识

现如今&#xff0c;我们生活在一个知识爆炸的时代。对于产品经理来说&#xff0c;信息不再是稀缺资源&#xff0c;如何高效地管理和利用这些信息&#xff0c;是他们面临的重要问题。这时&#xff0c;知识库便悄然成为产品经理必备的工具。所以&#xff0c;什么是知识库呢&#…

Python网络拓扑库之mininet使用详解

概要 网络工程师、研究人员和开发人员需要进行各种网络实验和测试&#xff0c;以评估网络应用和协议的性能&#xff0c;以及解决网络问题。Python Mininet是一个功能强大的工具&#xff0c;它允许用户创建、配置和仿真复杂的网络拓扑&#xff0c;以满足各种实际应用场景。本文…

2024美赛备战--六大题型常用模型简要分析

美国大学生数学建模竞赛&#xff08;MCM&#xff09;是全球知名的数学建模比赛之一&#xff0c;每年都吸引了来自世界各地的学生参加。在这场充满挑战的竞赛中&#xff0c;参赛者将面对多种题目&#xff0c;需要利用他们的数学建模技能来解决实际问题。下面&#xff0c;建模忠哥…

深入了解Yum:Linux系统的软件包管理利器

目录 软件包 软件包的来源 关于yum yum是什么 yum的相关操作 介绍rzsz rz&#xff08;从Windows本地传到Linux服务器&#xff09; sz&#xff08;从Linux服务器传到Windows本地&#xff09; 注意事项 查看软件包 安装软件 卸载软件 yum的本地配置 为什么要进行配置…

Redis学习——高级篇④

Redis学习——高级篇④ Redis7高级之Redis与Mysql数据双写一致性工程案例&#xff08;四&#xff09; 4.1 MySQL主从复制原理4.2 canal 工作原理4.3 mySQL->canal->redis 双写一致性1.环境2.配置Mysql3.配置canal4. Canal客户端&#xff08;Java编写&#xff0…

03:华为云管理|云主机管理|云项目实战

华为云管理&#xff5c;云主机管理&#xff5c;云项目实战 安全组配置部署跳板机配置yum源&#xff0c;安装软件包优化系统服务安装配置ansible管理主机 模版镜像配置配置yum源&#xff0c;安装软件包优化系统 网站云平台部署实战华为云的负载均衡 安全组配置 设置安全组 云…

Whatsapp 相关(七) -网络请求

本篇主要用来完善上篇文章 frida 监测网络请求的. whatsapp相关(五)- frida监测网络请求 1: 脚本 本次的脚本与上次的区别是,之前只能输出请求的地址,本次优化后,可输出请求参数,结果等. 代码如下: Java.perform(function () {var HttpURLConnection Java.use(java.net.H…

PyTorch][chapter 12][李宏毅深度学习][Semi-supervised Linear Methods-1]

这里面介绍半监督学习里面一些常用的方案&#xff1a; K-means ,HAC, PCA 等 目录&#xff1a; K-means HAC PCA 一 K-means 【预置条件】 N 个样本分成k 个 簇 step1: 初始化簇中心点 (随机从X中抽取k个样本点作为&#xff09; Repeat: For all in X: 根据其到 &…

MP4格式视频怎么提取gif?一招教你在线做

MP4是一种常见的数字多媒体容器格式&#xff0c;它是一种使用最广泛的视频文件格式之一。MP4文件可以包含音频、视频和字幕等多种媒体数据&#xff0c;并且可以通过各种播放器和设备进行播放和共享。它是一种压缩格式&#xff0c;可以在保持相对较小文件大小的同时提供较高的视…

数学建模学习笔记||灰色关联分析

灰色系统 信息绝对透明的是白色系统&#xff0c;信息绝对秘密的是黑色系统&#xff0c;灰色系统介于两者之间 关联分析 即系统的分析因素 包含多种因素的系统中&#xff0c;哪些因素是主要的&#xff0c;哪些因素是次要的&#xff0c;哪些因素影响大&#xff0c;哪些因素影响小…

Vue3下载WEBAPI导出的Excel文件

webApi查询数据保存为Excel /// <summary>/// 获取LMI3D相机涂胶测量数据/// </summary>/// <returns></returns>[HttpPost(Name "GetLMI3DGlueDataToExcel")]public async Task<IActionResult> GetLMI3DGlueDataToExcel(QueryGlueM…

搜维尔科技:「简报」元宇宙数字人赛道,优秀作品《黛妮卡》赏析

黛妮卡是宇宙航星局所特聘来研究纪录地球科技的星际种子。宇宙航星局汇集各星球的菁英并称他们为星际种子&#xff0c;星际种子有各自的任务&#xff0c;完成任务是他们的使命。 学校&#xff1a; 私立长荣高级中学(台湾) 选手&#xff1a; 郭伊珍 角色姓名&#xff1a; 黛妮…

Docker-Cgroup资源限制

目录 一、Cgroup 1.CGROUP概念 2.CGROUP 子系统 3.CGROUP 示例 二、内存资源限制 1.内存资源限制概念 2.内存资源限制参数 1 3.内存资源限制参数 2 三、CPU 资源限制 1.容器中 CPU 使用 2.容器 CPU 限制参数 四、实验演示 一、Cgroup 1.CGROUP概念 在linux内核里提…

【LeetCode: 25. K 个一组翻转链表 + 链表 + 递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

Vue之初识Vue CLI 脚手架

Vue CLI 是Vue 官方提供的一个全局命令工具 可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】 脚手架有什么好处&#xff1f; 1.开箱即用&#xff0c;零配置 2.内置 babel 等工具 3.标准化 使用步骤: 1.全局安装(一次):yarn globaladd vue/cli …

vue3中使用echarts

效果如图: 1、首先安装echarts npm install echarts --save安装后的版本为&#xff1a; “echarts”: “5.4.2”, 2、页面使用 <template><div class"contact_us_page main"><div class"contact_us " id"main" ref"ech…

实际项目演示:Python RegEx在数据处理中的应用!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 正则表达式&#xff08;Regular Expressions&#xff0c;简称 RegEx&#xff09;是一种强大的文本匹配和搜索工具&#xff0c;它在数据处理、文本解析和字符串操作中发挥着关键作用。Python 提供了内置的 re 模块…

DevOps落地笔记-01|追溯本源:DevOps的发展历史回顾

任何事物的诞生、发展和消亡都是由所处社会阶段决定的&#xff0c;软件开发方法也是一样。现在我们津津乐道的 DevOps&#xff0c;也有其自己的起源和诞生的前提条件&#xff0c;今天我带领你追本溯源&#xff0c;一起找一找 DevOps 兴起的历史根源。 当谈到 DevOps&#xff0…

kafka集群搭建需要做的事情

首先&#xff0c;虚拟机克隆好之后的步骤如下&#xff1a; 1. 修改IP、主机名&#xff0c;关闭防火墙&#xff1b;&#xff08;reboot重启&#xff09; 2. 在/etc/hosts文件中进行IP与主机名的映射配置&#xff0c;集群中每天都记得配置&#xff1b; 3. 安装JDK并进行分发&a…