C++——数组、多维数组、简单排序、模板类vector

news2024/12/25 16:10:30

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒Three.js🍖数据结构与算法体系教程

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

C++基础篇

内容参考链接
C++入门(一)C++——简介、Hello World、变量常量、数据类型

文章目录

  • C++基础篇
    • 前言
    • 一、数组
    • 二、多维数组
    • 三、简单排个序
    • 四、模板类 vector
    • 总结

前言

大家好,这里是前端杂货铺。

上一篇文章,我们初步认识了 C++,并学习了常量变量和数据类型等知识。

接下来,继续我们 C++ 的学习!


一、数组

数组就是一组相同类型的数据对象集合。

下面,我们进行对一维数组的 初始化,访问和遍历操作

#include<iostream>
using namespace std;

int main()
{
	// 长度为 10 的 int 类型的数组
	int a1[10];

	const int n = 4;
	// 长度为 4 的 double 类型的数组
	double a2[n];

	int i = 4;
	// double a3[i]; // 错误写法,元素个数不能为变量

	// 初始化
	int a3[4] = { 1, 2, 3, 4 };
	float a4[] = { 5, 6, 7 };
	short a5[10] = { 3, 6, 9 };
	// short a6[2] = { 3, 6, 9 }; // 报错,初始值太多

	// int a6[4] = a3; // 错误,不能用另一个数组对数组进行复制

	// 访问数组
	int a[] = { 1,2,3,4,5,6,7 };
	cout << "a[2] = " << a[2] << endl;
	a[2] = 30;
	cout << "修改后 a[2] = " << a[2] << endl;

	// 获取数组长度
	cout << "a数组所占空间大小为:" << sizeof(a) << endl;
	cout << "a数组中每个元素所占空间大小为:" << sizeof(int) << endl;
	
	int aSize = sizeof(a) / sizeof(int);
	cout << "数组a的长度为:" << aSize << endl;

	// 遍历
	for (int i = 0; i < aSize; i++) {
		cout << "a[" << i << "] = " << a[i] << endl;
	}

	// 范围 for 循环
	for (int num : a) {
		cout << num << endl;
	}

	cin.get();
}

在这里插入图片描述


二、多维数组

多维数组就是数组的数组。其访问等操作和一维数组几乎一致。详见下面的代码:

#include<iostream>
using namespace std;

int main()
{
	// 初始化 二维数组 三行四列
	int ia[3][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12},
	};
	// 等价于ia,但可读性不高
	int ia2[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
	
	// 只对第一个元素赋值,其余赋零值
	int ia3[3][4] = { 12 };

	// 第一个维度可省略(编译器可自动推断),第二个维度不可省略 
	int ia4[][4] = {
		{ 1,2,3,4 },
		{ 5,6,7,8 },
		{ 9,10,11,12 },
	};

	// 访问
	cout << "ia[1][2] = " << ia[1][2] << endl;

	// 遍历
	// 计算二维数组中的行数和列数
	cout << "ia总大小为:" << sizeof(ia) << endl;
	cout << "ia每一行的大小为:" << sizeof(ia[0]) << endl;
	cout << "ia每一个元素的大小为:" << sizeof(ia[0][0]) << endl;

	// 行数
	int rowCount = sizeof(ia) / sizeof(ia[0]);
	// 列数
	int colCount = sizeof(ia[0]) / sizeof(ia[0][0]);

	for (int i = 0; i < rowCount; i++){
		for (int j = 0; j < colCount; j++) {
			cout << ia[i][j] << "\t";
		}
		cout << endl;
	}

	// & 表示引用,后续会学习
	for (auto& row : ia) {
		for (auto num : row) {
			cout << num << "\t";
		}
		cout << endl;
	}

	cin.get();
}

在这里插入图片描述


三、简单排个序

我们使用双重 for 循环,对数组进行排序,下面的代码中我们使用了 选择排序法冒泡排序法 实现了对数组中无顺序的数进行排序。

#include<iostream>

using namespace std;

int main()
{
	int arr[] = { 5,7,8,1,2,4,6,9,8 };
	int size = sizeof(arr) / sizeof(arr[0]);

	// 选择排序
	for (int i = 0; i < size; i++) {
		for (int j = i + 1; j < size; j++) {
			if (arr[j] < arr[i]) {
				int temp = arr[j];
				arr[j] = arr[i];
				arr[i] = temp;
			}
		}
	}

	// 冒泡排序
	for (int i = 0; i < size; i++) {
		for (int j = 0; j < size - i - 1; j++) {
			if (arr[j] > arr[j + 1]) {
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}

	for (int num : arr) {
		cout << num << " ";
	}

	cout << endl;

	cin.get();
}

在这里插入图片描述


四、模板类 vector

vector 是对数组功能进行扩展的一个标准库类型。它容纳着一堆数据对象,其实就是一组类型相同的数据对象的集合。

vector 与 数组的区别:

  1. 数组是更加底层的数据结构;长度固定,功能较少,安全性没有保证;但性能更好,运行更高效;
  2. vector 是模板类,是数组的上层抽象;长度不定,功能强大;但运行效率较低;

C++ 11 还新增了 array 模板类,它跟数组更加类似,长度是固定的,但更加方便、更加安全。所以在实际应用中,对于固定长度的数组使用 array,不固定长度的数组使用 vector。

下面的代码,我们进行了 模板类的初始化、访问元素、修改元素、遍历元素、添加元素 等操作,其实现也比较简单,详见如下代码:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
	// 默认初始化
	vector<int> v1;

	// 列表初始化(拷贝初始化)
	vector<char> v2 = { 'a', 'b' };

	// 可以不加等号
	vector<char> v3 { 'a', 'b' };

	// 直接初始化
	vector<short> v4(5);
	// 直接初始化并附默认值 100
	vector<long> v5(5, 100);

	// 访问元素
	cout << "访问v5[3]元素:" << v5[3] << endl;

	// 修改元素
	v5[3] = 25;
	cout << "修改v5[3]的值为25:" << v5[3] << endl;
	// cout << v5[6] << endl; // 错误,越界访问

	// 遍历所有元素
	for (int i = 0; i < v5.size(); i++) {
		cout << v5[i] << " ";
	}

	cout << endl;

	// 添加元素
	v5.push_back(50);

	// 添加元素后遍历
	for (int num : v5) {
		cout << num << " ";
	}

	cout << endl;

	// 向空容器中添加倒序的元素
	for (int i = 10; i > 0; i--) {
		v1.push_back(i);
	}

	for (int num : v1) {
		cout << num << " ";
	}

	cin.get();
}

在这里插入图片描述


总结

本篇文章我们首先认识到了 C++ 的数组和多维数组,并熟悉了如何对其 初始化、访问、遍历

之后,我们通过 简单排序法,使用了双重 for 循环完成了对数组的排序。

最后,我们认识了 模板类 vector,了解了它与数组的区别,并熟悉了 初始化、访问、遍历、添加元素、获取长度 等操作。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. 百度百科 · C++
  2. 2023最新版C++【作者:尚硅谷】

在这里插入图片描述


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

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

相关文章

FaFu--练习复盘--2

3、函数练习 3.1、函数表达式&#xff08;1&#xff09; 描述 根据以下公式计算数学表达式的值&#xff0c;并将结果作为函数值返回。在main()函数中输入x&#xff0c;调用函数fun(x)&#xff0c;并输出fun(x)的值。 输入 输入1行&#xff0c;包含1个double类型的浮点数&…

数学建模实战Matlab绘图

二维曲线、散点图 绘图命令&#xff1a;plot(x,y,’line specifiers’,’PropertyName’,PropertyValue) 例子&#xff1a;绘图表示年收入与年份的关系 ‘--r*’:--设置线型&#xff1b;r:设置颜色为红色&#xff1b;*节点型号 ‘linewidth’&#xff1a;设置线宽&#xff1…

基于springboot+vue考编论坛

摘要 近年来&#xff0c;随着互联网的迅猛发展&#xff0c;编程论坛成为程序员们交流学术、分享经验的重要平台之一。为了满足广大程序员的需求&#xff0c;本文基于Spring Boot和Vue框架&#xff0c;设计并实现了一个功能强大的编程论坛。首先&#xff0c;我们选择Spring Boot…

RHEL - 更新升级软件或系统

《OpenShift / RHEL / DevSecOps 汇总目录》 文章目录 小版本软件更新yum update 和 yum upgrade 的区别升级软件和升级系统检查软件包是否可升级指定升级软件使用的发行版本方法1方法2方法3方法4 查看软件升级类型更新升级指定的 RHSA/RHBA/RHEA更新升级指定的 CVE更新升级指定…

当 OpenTelemetry 遇上阿里云 Prometheus

作者&#xff1a;逸陵 背景 在云原生可观测蓬勃发展的当下&#xff0c;想必大家对 OpenTelemetry & Prometheus 并不是太陌生。OpenTelemetry 是 CNCF&#xff08;Cloud Native Computing Foundation&#xff09;旗下的开源项目&#xff0c;它的目标是在云原生时代成为应…

Softmax函数介绍

Softmax函数是一种常用的激活函数&#xff0c;用于将一组实数值转换为概率分布。它常用于多类别分类问题中&#xff0c;将输入向量映射为各个类别的概率。 Softmax函数的公式如下&#xff1a; 其中&#xff0c;示输入向量的第 &#xfffd;i 个元素&#xff0c;&#xfffd;n …

【目标检测】YOLOv5算法实现(九):模型预测

本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github&#xff0c;删减了源码中部分内容&#xff0c;满足个人科研需求。   本系列文章主要以YOLOv5为例完成算法的实现&#xff0c;后续修改、增加相关模…

RHCE上课笔记(前半部分)

第一部分 网络服务 第一章 例行性工作 1.单一执行的例行性工作 单一执行的例行性工作&#xff08;就像某一个时间点 的闹钟&#xff09;&#xff1a;仅处理执行一次 1.1 at命令&#xff1a;定时任务信息 [rhellocalhost ~]$ rpm -qa |grep -w at at-spi2-core-2.40.3-1.el9.x…

SDCMS靶场通过

考察核心&#xff1a;MIME类型检测文件内容敏感语句检测 这个挺搞的&#xff0c;一开始一直以为检查文件后缀名的&#xff0c;每次上传都失败&#xff0c;上传的多了才发现某些后缀名改成php也可通过&#xff0c;png图片文件只把后缀名改成php也可以通过&#xff0c;之前不成功…

最全机器学习预测全家桶,持续更新!看这一篇绝对够了!MATLAB代码

全家桶一直在持续更新中&#xff0c;截止到本期&#xff0c;一共发了7篇关于机器学习预测全家桶的文章。且后续还会继续更新。参考文章如下&#xff1a; 1.五花八门的机器学习预测&#xff1f;一篇搞定不行吗&#xff1f; 2.机器学习预测全家桶&#xff0c;多步预测之BiGRU、Bi…

阿里云国外服务器多少钱一个月?24元/月

阿里云国外服务器优惠活动「全球云服务器精选特惠」&#xff0c;国外服务器租用价格24元一个月起&#xff0c;免备案适合搭建网站&#xff0c;部署独立站等业务场景&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动&#xff1a; 全球云服务器精选特惠…

代码随想录刷题题Day38

刷题的第三十八天&#xff0c;希望自己能够不断坚持下去&#xff0c;迎来蜕变。&#x1f600;&#x1f600;&#x1f600; 刷题语言&#xff1a;C Day38 任务 ● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组 1 最长递增子序列 300.最长递增子序列 …

运筹说 第107期 | 排队论创始人——阿格纳·克拉鲁普·爱尔朗

前面我们已经了解了非线性规划的相关内容&#xff0c;相信大家一定也有所收获&#xff0c;下面我们将带着大家继续了解排队论的相关内容&#xff0c;在本次文章中我们将一起走近排队论的奠基人——阿格纳克拉鲁普爱尔朗&#xff08;Agner Krarup Erlang&#xff09;&#xff0c…

x-cmd pkg | jieba - 中文结巴分词工具

目录 简介首次用户功能特点竞品分析进一步阅读 简介 结巴中文分词&#xff08;jieba&#xff09;是一款在 Python 环境下使用的开源中文文本分词工具。它支持多种分词模式&#xff0c;包括精确模式、全模式和搜索引擎模式&#xff0c;同时支持繁体分词和自定义词典。因其易用性…

【JavaEE】_基于UDP实现网络通信

目录 1. 服务器 1.1 实现逻辑 1.2 代码 1.3 部分代码解释 2. 客户端 2.1 实现逻辑 2.2 代码 2.3 客户端部分代码解释 3. 程序运行结果 4. 服务器客户端交互逻辑 此篇内容为实现UDP版本的回显服务器echo server&#xff1b; 普通服务器&#xff1a;收到请求&#xff…

Unity中ShaderGraph下获取主灯

文章目录 前言一、ShaderGraph获取主灯1、创建ShaderGraph2、创建一个自定义方法&#xff08;Custom Function&#xff09;节点3、新建两个 Vector3 类型的输出变量4、选择自定义节点程序体为 string 类型5、编写程序体6、我们输出主光方向看看效果7、我们输出主光颜色看看效果…

ios适配虚拟home键

在H5开发过程中遇到一个兼容性问题。iphone手机的虚拟home键会对屏幕底部的内容造成遮挡。要处理此问题&#xff0c;需要清楚安全区域这个概念。 安全区域 根据刘海和虚拟Home键&#xff0c;Apple为其设备提供了屏幕安全区域的视觉规范 竖屏&#xff1a;竖屏的时候&#xff…

「优选算法刷题」:查找总价格为目标值的两个商品

一、题目 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 示例 1&#xff1a; 输入&#xff1a;price [3, 9, 12, 15], target 18 输出&#xff1a;[3,15] 或者 [15,3]示例…

OpenCV-Python(49):图像去噪

目标 学习使用非局部平均值去噪算法去除图像中的噪音学习函数cv2.fastNlMeansDenoising()、cv2.fastNlMeansDenoisingColored等 原理 在前面的章节中我们已经学习了很多图像平滑技术&#xff0c;比如高斯平滑、中值平滑等。当噪声比较小时&#xff0c;这些技术的效果都是很好…

【Qt之模型视图】1. 模型和视图架构

1. 模型/视图架构是什么及有什么用 MVC&#xff08;Model-View-Control&#xff09;是一种源自Smalltalk的设计模式&#xff0c;通常用于构建用户界面。 MVC由三种类型的对象组成。模型是应用对象&#xff0c;用来表示数据&#xff1b;视图是模型的用户界面&#xff0c;用来显…