蓝桥杯 常用STL (C++) 未完待续

news2025/1/31 8:06:34

在这里插入图片描述

动态数组

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

引用库

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

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

构造一个动态数组

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

插入元素

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

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

获取长度并且访问元素

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

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

删除元素

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

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

清空

C++中都只需要调用clear()方法就可清空vector。
C++中vector的clear()只是清空vector,并不会清空开的内存。用一种方法可以清空vector的内存:

// vector<int> v;
vector<int>().swap(v); 

C++ vector 方法总结

在这里插入图片描述

vector的基础使用

首先我们引入需要的头文件vector,在代码头部
写下

#include<vector>

首先我们学习如何使用基础的vector。
在main函数里面通过 vector < int > v来定义一个储存整数的空的vector。当然vector可以存任何类型的数据,
比如vector< string >v等等。用int来举例。在main函数的开头定义一个储存整数的动态数组v

我们把1到10的平方依次储存到刚才定义的vector里面。这里我们需要借助一个循环来完成,循环枚举1到10。

#include<vector>
#include<iostream>
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;
}

在这里插入图片描述

vector 的高级用法

用动态数组储存自定义数据

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

struct Student{
	string name;//名字 
	int age;//年龄 
};
int main(){
	vector<Student> class1;//班级
	Student stu1,stu2;//学生1,学生2
	stu1.name="xiaohong";
	stu1.age=12;
	stu2.name="xiaoming";
	stu2.age=25;
	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

二维动态数组

我们都知道,数组可以开二维的,那么动态数组能用二维的吗?答案当然是肯定的,动态数组也支持二维
的。vector<vector>vec,这样就定义了一个二维的动态数组。注意,< int > >中间有一个空格,这个空格一定要加
上,否则在一些老版本的编译器上将不能通过编译。

通过上面的方法定义的二维数组,每一维都是空的,我们必须要一维一维的赋值。比如我们规定第一维的大小为n。

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;j++){
	for(int j=0;j<vec2[i].size();i++){
		cout<<vec2[i][j]<<" ";
	}
	cout<<endl;
}

在这里插入图片描述

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

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

相关文章

Python数据类型转换

举例&#xff1a;使用Python实现超市的收银系统 name input(‘请输入您要购买商品名称&#xff1a;’) id input(‘请输入您要购买商品编号&#xff1a;’) price input(‘请输入您要购买的商品价格&#xff1a;’) print(f’您购买了{name}&#xff0c;商品编号为{id}&am…

《Deep Residual Learning for Image Recognition》阅读笔记

论文标题 《Deep Residual Learning for Image Recognition》 撑起CV界半边天的论文Residual &#xff1a;主要思想&#xff0c;残差。 作者 何恺明&#xff0c;超级大佬。微软亚研院属实是人才辈出的地方。 初读 摘要 提问题&#xff1a; 更深层次的神经网络更难训练。 …

关于unaipp生成的vue3项目开启微信云函数所遇到的问题

使用uniapp创建的vue3项目&#xff0c;需要用到H5静态页面跳转小程序的时候&#xff08;具体操作看微信开发文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/staticstorage/jump-miniprogram.html&#xff09;&#xff0c;会用到微信开发者工…

Linux基本配置与用户创建

文章目录 一.Linux的配置二.Linux用户的创建 一.Linux的配置 Linux是一款类UNIX的操作系统&#xff0c;一般指的是Linux内核加GUN套件。Linux系统稳定&#xff0c;而且是开源软件&#xff0c;应用范围很广&#xff0c;很受欢迎。为了能学习Linux我们需要配置一个Linux系统&…

LeetCode讲解篇之198. 打家劫舍

LeetCode讲解篇之198. 打家劫舍 文章目录 LeetCode讲解篇之198. 打家劫舍题目描述题解思路题解代码 题目描述 题解思路 该问题可以通过递推来完成 递推公式&#xff1a; 前n间房的最大金额 max&#xff08;前n-1间房的最大金额&#xff0c; 前n-2间房的最大金额第n-1间房的最…

蓝桥杯双周赛算法心得——三带一(暴力枚举)

大家好&#xff0c;我是晴天学长&#xff0c;枚举思想&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。 1) .三带一 2) .算法思路 1.通过Scanner读取输入的整数n&#xff0c;表示接下来有n个字符串需要处理。 2.使用循环遍历每个字符串&#xff1a;…

2023版 STM32实战10 内部Flash读写

简介和注意事项 -1-STM32内部提供了闪存区域&#xff0c;用来存储用户代码和自定义数据 -2-F1系列的写入最少两字节&#xff08;半字&#xff09; -3-每个地址存8位数据 -4-写入之前需要解锁&#xff0c;写完需要上锁 -5-读取不需要解锁 存储器分布 以下三张图可清楚的…

SLAM从入门到精通(bresenham绘制算法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们说过&#xff0c;学术界和工业界对于slam的要求是不一样的。前者要求robot在运动的过程中&#xff0c;同步实现定位和制图的操作。但是工业…

罗德施瓦兹频谱仪使用笔记

本文主要介绍罗德频谱仪的两个重要参数RBW和VBW&#xff0c;以及测量设置&#xff0c;以帮助初学者理解频谱解析以及频谱仪的具体使用。 一、什么是RBW和VBW&#xff0c;它们对测量得到结果的影响。 在罗德施瓦兹频谱仪的频谱测量中&#xff0c;有两个参数设置用得比较多&…

机器视觉工程师越学习越谦虚-庆幸自己始终保持清醒

目录 ​这么多年的职场生涯&#xff0c;不断的学习&#xff0c;不断的进取&#xff0c;不断追求新的梦想。一直学习&#xff0c;越学习&#xff0c;越感觉自己的不足&#xff0c;自我感觉越无知&#xff0c;越谦虚。所以孔子讲“不耻下问”、“三人行必有我师”&#xff0c;像释…

芯片学习记录MP2144

MP2144 芯片介绍 MP2144是一款具有内部功率MOSFET的单片降压开关模式转换器。它可以从2.5V到-5.5V的输入电压实现高达2A的连续输出电流&#xff0c;具有出色的负载和线路调节。输出电压可以调节到低至0.6V。 恒定导通时间控制方案提供快速瞬态响应并简化环路稳定。故障状态保…

__main__文件学习测试如下

参考博客 https://www.jb51.net/article/251567.htm test01.py # https://www.jb51.net/article/251567.htmdef step():print(__name__)print("step1 买菜""step2 洗菜""step3 切菜""step4 炒菜")if __name__ __main__:print(准备制…

【统计学概念】初学者指南:了解置信区间

一、说明 什么是置信区间&#xff1f;如何将概率转化成信心度&#xff1f;信心度如何去工作&#xff1f;这些初步的统计概念需要明晰&#xff0c;然后才能应用统计模型&#xff0c;然后是贝叶斯推理&#xff0c;我们将逐步深入这些概念。 二、总体与样本个体统计 总体是研究人…

自定义Docker镜像--Jupyterlab

概述 自定义Jupyterlab镜像&#xff0c;为deployment做准备 步骤 下载基础镜像&#xff1a;centos:7.9.2009 docker search centos:7.9.2009 docker pull centos:7.9.2009 启动容器 部署应用 # 启动容器 docker run -it --name test centos:7.9.2009 bash# 在容器内部署…

windows 10LTSC安装微软应用商店(理论上适用于所有windows10)

LTSC-Add-MicrosoftStore-2019.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供LTSC-Add-MicrosoftStore-2019.zip最新版正式版官方版绿色版下载,LTSC-Add-MicrosoftStore-2019.zip安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://w…

习题2.17

很简单的一个提 代码如下 (defn last-pair[a](if (empty? (rest a))(first a)(last-pair (rest a) ))) 获取列表最后一个元素&#xff0c;递归的办法如上。

WLAN 无线案例(AC配置模板)

实验说明&#xff1a; 无线用户VLAN 30 192.168.30.0/24 AP和AC用VLAN 20 192.168.20.0/24 有线网段 VLAN 10 192.168.10.0/24 步骤一&#xff1a;全网互通 sw1&#xff1a; sysname sw1 # vlan batch 10 20 30 # dhcp enable # ip pool 20 gateway-list 192.168.20.1…

PHP基础语法(上)

目录 前言 一、基础语法 1.1 标记 1.2 输出语句 1.2.1 echo 1.2.2 print 1.3 注释 1.3.1 单行注释 1.3.2 多行注释 1.4 标识符 1.5 关键字 二、数据与运算 2.1 常量 2.1.1 常量的定义和使用 2.1.2 预定义常量 2.2 变量 2.2.1 变量的赋值 2.2.2 超全局变量 2.3 数据类型 2.3.1 …

Python 中的 DNS 查找

本文将讨论 DNS 和 DNS 查找的概念。 之后&#xff0c;我们讨论使用 Python 进行 DNS 查找的方法。 什么是 DNS DNS&#xff08;域名系统&#xff09;将域名转换为公共IP地址。 DNS 服务器将任何网站的域名转换为该网站主机服务器的公共 IP。 DNS查询 DNS 查找是一个过程&…

微信小程序 uniapp+vue线上洗衣店业务管理系统演89iu2

本课题意在设计一种系统的、基于用户体验的线上洗衣服务模式&#xff0c;具有如下的研究意义: (1)为用户提供更简单、便捷的洗衣服务模式; (2)为智能柜的盈利模式提供了新的方向; (3)通过线上系统、智能柜与洗衣工厂结合的方式&#xff0c;为洗衣企业构建了一套节 省人力成本的…