蓝桥杯-常用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++
中vector
的clear()
只是清空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列
的动态数组,每个元素的初始值是0
:vector<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;
}
相关文章:

蓝桥杯-常用STL(一)
常用STL 🎈1.动态数组🎈2.vector的基础使用🔭2.1引入库🔭2.2构造一个动态数组🔭2.3插入元素🔭2.4获取长度并且访问元素🔭2.5修改元素🔭2.6删除元素🔭2.7清空 Ἰ…...

SQL查询数据库环境(dm8达梦数据库)
SQL查询数据库环境dm8达梦数据库 环境介绍 环境介绍 某些环境没有图形化界面,可以使用sql语句查询达梦数据库环境情况 SELECT 实例名称 数据库选项,INSTANCE_NAME 数据库选项相关参数值 FROM V$INSTANCE UNION ALL SELECT 授权用户,(SELECT AUTHORIZED_CUSTOMER FROM V$LICE…...

DolphinScheduler + Amazon EMR Serverless 的集成实践
01 背景 Apache DolphinScheduler 是一个分布式的可视化 DAG 工作流任务调度开源系统,具有简单易用、高可靠、高扩展性、⽀持丰富的使用场景、提供多租户模式等特性。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方…...

【服务器APP】利用HBuilder X把网页打包成APP
目录 🌺1. 概述 🌼1.1 新建项目 🌼1.2 基础配置 🌼1.3 图标配置 🌼1.4 启动界面配置 🌼1.5 模块配置 🌼1.6 打包成APP 🌺1. 概述 探讨如何将网页转化为APP,这似乎…...
vue3 组合式API获取子组件的属性和方法
在vue2中,获取子组件实例的方法或者属性时,父组件直接通过ref即可直接获取子组件的属性和方法,如下: // father.vue <child ref"instanceRef" /> this.$ref[instanceRef].testVal this.$ref[instanceRef].testFun…...
[数据结构+算法] 给一棵树和一个sum,判断是否存在从root到叶子结点的path之和等于sum?
[数据结构算法] 给一棵树和一个sum,判断是否存在从root到叶子结点的path之和等于sum? 可以使用两种方法求解 递归 CheckTreeSumRecursive 问题转换为递归判断左右子树是否满足路径和等于sum减去当前节点的值。 迭代 CheckTreeSumNonRecursive 使用两个…...

非阿里云注册域名如何在云解析DNS设置解析?
概述 非阿里云注册域名使用云解析DNS,按照如下步骤: 添加域名。 添加解析记录。 修改DNS服务器。 DNS服务器变更全球同步,等待48小时。 添加解析记录 登录云解析DNS产品控制台。 在 域名解析 页面中,单击 添加域名 。 在 …...

微服务-微服务Alibaba-Nacos注册中心实现
1. 系统架构的演变 俗话说, 没有最好的架构,只有最合适的架构。 微服务架构也是随着信息产业的发展而出现的最有普 遍适用性的一套架构模式。通常来说,我们认为架构发展历史经历了这样一个过程:单体架构——> 垂直架构 ——&g…...

多符号表达式的共同子表达式提取教程
生成的符号表达式,可能会存在过于冗长的问题,且多个符号表达式中,有可能存在相同的计算部分,如果不进行处理,计算过程中会导致某些算式计算多次,从而影响计算效率。 那么多个符号表达式生成函数时…...

Java 反射获取属性名、属性类型、属性值、判断属性类型
1.代码 /*** 通过反射获取对象属性名、属性类型、属性值** param t 需要反射的对象* author hcx*/public static <T> void reflect(T t){// 获取所有属性// getDeclaredFields 不包含父类,包含私有属性// getFields 包含父类属性Field[] fields t.getClass(…...

Docker私有仓库搭建
目录 1.registry私有仓库 拉取registry镜像 修改docker配置文件并重启 运行registry容器 修改想要上传的镜像的标签并上传验证 再另一台主机上获取此镜像 浏览器验证 2.Docker--harbor私有仓库部署与管理 什么是Harbor Harbor的特性 Harbor的构成 Harbor部署 准备…...

C语言第十三弹---VS使用调试技巧
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 VS调试技巧 1、什么是bug 2、什么是调试(debug)? 3、Debug和Release编辑 4、VS调试快捷键 4.1、环境准备 4.2、调试…...

AST反混淆实战-jsjiamiv7最高配置
js加密混淆网站 https://www.jsjiami.com/一、混淆demo生成 01 打开目标网址 https://www.jsjiami.com/ 02 按照顺序加密混淆二、混淆前后demo 混淆前的源码 (function(w, d) { w.update "2023年01月17日05:34:29更新"; d.info "本站历时1年半研发的新版本V7…...
colorThief+vite+react使用方法
官网: Color Thief npm i --save colorthief 第一种,import载入图片 经过尝试,在vite中,要引入.mjs版本 import ColorThief from colorthief/dist/color-thief.mjs 第一种,通过import载入图片 import aa from /assets/123.jpgconst [resultColor,setResultColor]useState() …...

Hive(15)中使用sum() over()实现累积求和和滑动求和
目的: 三个常用的排序函数row_number(),rank()和dense_rank()。这三个函数需要配合开窗函数over()来实现排序功能。但over()的用法远不止于此,本文咱们来介绍如何实现累计求和和滑动求和。 1、数据介绍 三列数据,分别是员工的姓名、月份和…...
2024年Java搭建面试题
2024年Java实战面试题(北京)_java 5 年 面试-CSDN博客 1、搭建docker容器 # 安装依赖的环境 yum -y install yum-utils device-mapper-persistent-data lvm2 # 设置镜像源为阿里 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/lin…...

二维数组的学习
前言 在前面我们学习了一维数组,但是有的问题需要用二位数组来解决。 二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式: 数据类型 数…...
Java集合(List集合)
什么是集合? 什么是集合?集合就是“由若干个确定的元素所构成的整体”,在程序中,一般代表保存 若干个元素(数据)的某种容器类。 在Java中,如果一个Java对象可以在内部持有(保存&…...
7、Json文件的操作总结【robot framework】
1、JSONLibrary简介 Robot Framework 是一种通用的自动化测试框架,它支持使用关键字驱动的测试,并且易于学习和使用。Robot Framework 提供了丰富的标准库,而 JSONLibrary 就是其中之一,用于处理 JSON 数据。 安装 JSONLibrary 在…...
python 循环解压 解压多重压缩包
在实际数据中,经常会有压缩包套压缩包的情况,并且有可能出现“zip”压缩包下面套“tar”的可能。 你可以运行后面的代码,来完成自动解压。代码会不断检查folder_a_path 文件夹下是否还有压缩包。目前支持zip、rar、tar、7z等四种格式的压缩文…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...