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

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉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++【作者:尚硅谷】

在这里插入图片描述


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

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

相关文章

C语言通过MSXML6.0读写XML文件(同时支持char[]和wchar_t[]字符数组)

开发环境&#xff1a;Visual Studio 2010 运行环境&#xff1a;Windows XP SP3 第一节 读取XML文件&#xff08;使用wchar_t[]字符数组&#xff09; 读取XML文件可使用IXMLDOMDocument_load函数。 /* 这个程序只能在C编译器下编译成功, 请确保源文件的扩展名为c */ #define …

AWTK 开源串口屏开发(7) - 屏幕保护

现代屏幕其实并不需要屏幕保护&#xff0c;不过屏幕保护程序会衍生一些其它用途。比如&#xff1a; 保护隐私。长时间不操作&#xff0c;通过动画或者其它方式隐藏屏幕内容。数据安全。长时间不操作&#xff0c;需要输入密码才能恢复。美观/广告。长时间不操作&#xff0c;显示…

Linux的IO文件操作和文件系统

前要&#xff1a;本次我想给您带来关于 IO 和文件的知识&#xff0c;而文件在本系列中分为内存上的文件和磁盘上的文件。 1.文件概念 1.1.文件读写 在谈及系统接口之前&#xff0c;我们先来从 C 语言的角度来谈及一些前要知识&#xff0c;以辅助我们后续来理解系统 IO。 我们…

如何优化SQL查询性能?解开你的数据库瓶颈之谜!

目录 1、前言 2、创建索引 2.1 确保表的主键和外键都有索引 2.2 根据查询条件创建适当的索引 2.3 避免在索引列上进行类型转换或函数操作 3、合理设计数据库架构 3.1 表的拆分和归并&#xff0c;避免不必要的数据冗余 3.2 使用适当的数据类型和字段长度&#xff0…

JMeter实操入门之登录

JMeter实操入门之登录 前言初级-无变量的登录线程组取样器-HTTP请求 进阶-定义变量的登录用户定义的变量获取JSON返回的数据-tokentoken设置全局变量 前言 安装及环境配置教程可移步&#xff1a;JMeter安装与配置环境 本篇文章针对小白进一步的认识及运用JMeter&#xff0c;围绕…

Microsoft Visual C++ RunTime怎么下载?

64位下载链接 下载好程序后双击&#xff0c;勾选“我同意许可条款和条件”&#xff0c;然后点击“安装” 安装完成后点击“关闭”即可 感谢您的阅读与关注&#xff0c;服务器大本营助您成为更专业的服务器管理员&#xff01;

一文了解【完全合作关系】下的【多智能体强化学习】

处于完全合作关系的多智能体的利益一致&#xff0c;获得的奖励相同&#xff0c;有共同的目标。比如多个工业机器人协同装配汽车&#xff0c;他们的目标是相同的&#xff0c;都希望把汽车装好。 在多智能体系统中&#xff0c;一个智能体未必能观测到全局状态 S。设第 i 号智能体…

文心一言 VS 讯飞星火 VS chatgpt (183)-- 算法导论13.4 7题

七、用go语言&#xff0c;假设用 RB-INSERT 将一个结点 x 插入一棵红黑树&#xff0c;紧接着又用 RB-DELETE 将它从树中删除。结果的红黑树与初始的红黑树是否一样&#xff1f;证明你的答案。 文心一言&#xff1a; 首先&#xff0c;我们需要明确RB-INSERT和RB-DELETE的基本操…

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

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

云服务器定价_云服务器价格_云主机计费模式_腾讯云

腾讯云服务器租用价格表&#xff1a;轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三年、2核4G5M带宽218元一年&#xff0c;2核4G5M带宽756元三年、轻量4核8G12M服务器446元一年、646元15个月&#xff0c;云服务器CVM S5实例2核2G配置280.8元一年…

UE5 - Polycam扫描文件导入插件

Polycam是利用Gaussian Splatting进行3D重建的3D扫描相关软件&#xff0c;其对应有UE引擎的插件&#xff08;Plugin_XV3dGS&#xff09;可以把相关格式的文件导入到引擎&#xff1b; 首先Polycam的官网为&#xff1a;My Captures | Polycam 可以下载各种用户扫描文件&#xff…

java数据结构与算法刷题-----LeetCode485. 最大连续 1 的个数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 法一&#xff0c;双指针2. 法二&#xff1a;变量计数 1. 法一…

【开源】基于JAVA语言的CRM客户管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 用例设计3.2 E-R 图设计3.3 数据库设计3.3.1 客户表3.3.2 商品表3.3.3 客户跟踪表3.3.4 客户消费表3.3.5 系统角色表 四、系统展示五、核心代码5.1 查询客户5.2 新增客户跟踪记录5.3 新增客户消费订单5.4 查…

JVM(上)

目录 一、JVM概述 一、JVM作用 二、JVM整体组成部分 二、JVM结构-类加载 一、类加载子系统概述 二、类加载过程 1.加载 2.链接 3.初始化&#xff08;类加载过程中的初始化&#xff09; 三、类加载器分类 大致分两类&#xff1a; 细致分类&#xff1a; 四、双亲委派机制 五、打…

【记录一下】【年底清洗抽油烟机---被套路了540块钱!!!】年底了,注意各种套路【警惕,不然钱没没!!!】

■事情结果 被骗&#xff08;啊&#xff0c;不是被骗&#xff0c;是被套路&#xff09;了360块钱 13050558273&#xff08;诈骗者&#xff0c;啊不能算是诈骗&#xff0c;是下套的清洗油烟机的吴某的电话&#xff09; 4008731099&#xff08;这个电话不是方太的客服电话&…

数据操作——Column 对象

Column 对象 1. 什么是Column对象 Column 表示了 Dataset 中的一个列, 并且可以持有一个表达式, 这个表达式作用于每一条数据, 对每条数据都生成一个值 2.Column对象如何创建 ’ 单引号 ’ 在 Scala 中是一个特殊的符号, 通过 ’ 会生成一个 Symbol 对象, Symbol 对象可以理…

优先级队列(堆) PriorityQueue

&#x1f3a5; 个人主页&#xff1a;Dikz12&#x1f4d5;格言&#xff1a;那些在暗处执拗生长的花&#xff0c;终有一日会馥郁传香欢迎大家&#x1f44d;点赞✍评论⭐收藏 目录 1.优先级队列 2.优先级队列的模拟实现 2.1 堆的概念 2.2 堆的创建 2.3 堆的插入和删除 2.…

数据结构——二叉树

目录 一、前言 1.1 树 1.2 树的相关概念 二、二叉树 2.1 定义 2.2 特殊类型 2.3 二叉树的性质 2.4 二叉树的存储结构 &#xff08;1&#xff09;顺序存储 &#xff08;2&#xff09;链式存储 三、二叉树相关操作 3.1 创建一颗二叉树 3.2 二叉树的遍历 &#xff…

构建STM32MP133的Buildroot环境

意法半导体ST在坚持用 Yocto构建他们的OpenSTLinux MP1系列MCU&#xff0c;编译费劲&#xff0c;而且我们的应用不需要Yocto的环境&#xff0c;所以基于Buildroot的最小Linux系统更适合我们。 STM32MP133微处理器基于单Arm Cortex-A7内核&#xff0c;运行频率可达1 GHz&#x…

JVM对象创建与内存回收机制

对象的创建过程有如下步骤&#xff1a; 1.类加载检查&#xff1a; 虚拟机遇到一个new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过&#xff0c;如果没…