【013】C++数组之一维数值数组和二维数值数组

news2024/11/25 13:24:25

一维数值数组和二维数值数组

  • 引言
  • 一、一维数值数组
    • 1.1、概念
    • 1.2、一维数值数组的定义
    • 1.3、一维数值数组的初始化
    • 1.4、一维数值数组的元素操作
    • 1.5、使用示例
  • 二、二维数值数组
    • 2.1、概述
    • 2.2、二维数值数组的初始化
    • 2.3、二维数值数组的元素操作
    • 2.4、使用示例
  • 总结

引言


💡 作者简介:专注于C/C++高性能程序设计和开发,理论与代码实践结合,让世界没有难学的技术。包括C/C++、Linux、MySQL、Redis、TCP/IP、协程、网络编程等。
👉
🎖️ CSDN实力新星,社区专家博主
👉
🔔 专栏介绍:从零到c++精通的学习之路。内容包括C++基础编程、中级编程、高级编程;掌握各个知识点。
👉
🔔 专栏地址:C++从零开始到精通
👉
🔔 博客主页:https://blog.csdn.net/Long_xu


🔔 上一篇:【011】

一、一维数值数组

1.1、概念

用一段连续的空间存放相同类型的变量,这样的容器(结构)叫做数组。

在C++中,一维数值数组是一种由相同类型的元素组成的线性数据结构。每个元素都可以通过下标访问,并且所有元素按照它们在数组中出现的顺序排列。

在C++中声明一维数值数组的语法如下:

type arrayName[arraySize];

其中,type表示数组元素类型,arrayName为数组名称,arraySize表示数组大小。

例如,可以声明一个包含5个整型元素的一维数值数组:

int arr[5];

这将创建一个名为arr的整型数组,其大小为5。我们可以通过下标访问每个元素,例如:

arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 50;

这样就把1到5分别赋值给了这个整型数组的前五个元素。
在这里插入图片描述

需要注意的是,在C++中数组下标从0开始而不是从1开始。也就是说,第一个元素对应下标0,第二个对应下标1,以此类推。

1.2、一维数值数组的定义

步骤:

  1. 数组名和 [] 表示数组。
  2. 将数组的个数放入[]中。
  3. 用元素类型定义一个变量。

数组的大小定义时必须指定,并且不可更改。

以下是定义一维数值数组的示例代码:

int arr[5]; // 定义一个包含5个整型元素的数组
float floatArr[10]; // 定义一个包含10个单精度浮点型元素的数组
double doubleArr[] = {1.2, 3.4, 5.6, 7.8}; // 不指定数组大小,直接用花括号赋值
char charArr[100] = "Hello World"; // 定义一个包含100个字符元素的数组,并初始化为字符串"Hello World"

以上示例中,第一个和第二个示例分别定义了一个整型和单精度浮点型的一维数值数组。第三个示例使用了花括号对数组进行初始化,编译器会自动计算出该数组大小为4。最后一个示例定义了一个包含100个字符元素的一维字符数组,并将其初始化为字符串"Hello World"。

需要注意的是,在定义一维数值数组时,如果未对其进行初始化,则其中每个元素都将被默认初始化为其类型的默认值。例如,对于整型而言,默认值为0。

在这里插入图片描述

1.3、一维数值数组的初始化

(1)全部元素初始化。

int arr[5]={10,20,30,40,50};

如果数组的全部元素都初始化,可以省略[]的数值。如果省略[]中的数字,数组元素个数就由初始化元素个数确定,例如:

int arr[]={10,20,30};// 三个元素

(2)部分元素初始化。未初始化的部分自动补0。

int arr[5]={10,20,30};//10,20,30,0,0

(3)建议将数组的所有元素初始化为0。

int arr[5]={0};// 将第一个元素初始化为0,其他元素自动补0

(4)指定元素初始化。

int arr[5]={[1]=10,[3]=20};// 0,10,0,20,0

1.4、一维数值数组的元素操作

在数组中,每个元素都是按照顺序编号的,并且可以通过下标访问它们。以下是一些常用的一维数组元素操作:

  1. 定义数组。定义一个包含n个元素的整型数组arr,可以使用如下代码:
int arr[n];
  1. 初始化数组。定义数组之后,可以对其进行初始化。有两种方式:
  • 手动初始化:依次给每个元素赋值。
int arr[5] = {1, 2, 3, 4, 5};
  • 自动初始化:如果只给部分元素赋值,则未赋值的元素会自动被初始化为0。
int arr[5] = {1, 2}; // 前两个元素为1和2,后三个元素自动初始化为0
  1. 访问数组元素

可以使用下标(从0开始)访问数组中指定位置的元素。

int a = arr[0]; // 访问第一个元素
arr[3] = 10;    // 将第四个元素赋值为10
  1. 获取数组长度

使用sizeof运算符可获取整个数组占用内存大小(单位为字节)。若要获取实际包含的数据量,需要将总字节数除以单个数据类型所占字节数。

int len = sizeof(arr) / sizeof(int); // 数组长度为5
  1. 遍历数组

可以使用for循环遍历整个数组。

for (int i = 0; i < n; i++) {
    cout << arr[i] << endl;
}

1.5、使用示例

从键盘中输入10个int数,求这10个数的最大值和最小值。

#include <iostream>
using namespace std;

int main()
{
	int arr[10];
	int n=sizeof(arr)/sizeof(arr[0]);
	int i=0;
	cout<<"请输入"<<n<<"个数值:";
	for(i=0;i<n;i++)
	{
		cin>>arr[i];
	}
	// 求最大值和最小值
	int min,max;
	min=max=arr[0];
	for(i=1;i<n;i++)
	{
		if(max<arr[i])
			max=arr[i];
		if(min>arr[i])
			min=arr[i];
	}
	cout<<"最大值:"<<max<<", 最小值:"<<min<<endl;
	return 0;
}

二、二维数值数组

2.1、概述

C++中的二维数组是一个由多个一维数组组成的矩阵结构,可以用来表示表格、图像等具有二维结构的数据。在二维数组中,每个元素都需要使用两个下标来确定其位置。例如,arr[i][j]表示第i行第j列的元素。
在这里插入图片描述
二维数值数组的特性:

  • 二维数组的总大小 = 行数 * 列数 * 每个元素的大小。即sizeof(arr)。
  • 行数=sizeof(arr)/sizeof(arr[0])。
  • 列数=sizeof(arr[0])/sizeof(arr[0][0])。

定义一个包含n行m列的整型二维数组arr,可以使用如下代码:

int arr[n][m];

2.2、二维数值数组的初始化

(1)分段初始化。

// 完全初始化
int arr[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};
// 完全初始化也可以省略行数
int arr2[][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}};
// 部分初始化
int arr3[3][4]={{1,2,3},{1,2},{0}};

(2)连续初始化。

// 完全初始化
int arr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
// 完全初始化也可以省略行数
int arr2[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
// 部分初始化,其他自动补零
int arr[3][4]={1,2,3,4,5,6,7};

(3)从另一个角度上看,与一维数组类似,也可以分为手动或自动初始化一个二维数组。

  • 手动初始化:需要按行依次给每个元素赋值。
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}};
  • 自动初始化:如果只给部分元素赋值,则未赋值的元素会自动被初始化为0。
int arr[3][4] = {{1, 2}, {5}, {9}}; // 部分元素被赋值为非零值,其他自动初始化为0

2.3、二维数值数组的元素操作

  1. 访问二维数组元素。可以使用两个下标(从0开始)访问二位数组中指定位置的元素。
int a = arr[0][0]; // 访问第一行第一列的元素
arr[1][2] = 10;    // 将第二行第三列的元素赋值为10
  1. 获取二维数组的大小。可以使用sizeof运算符获取整个二维数组占用内存大小。要获取实际包含数据量,需要将总字节数除以单个数据类型所占字节数。
int size = sizeof(arr) / sizeof(int); // 数组大小为 n * m * sizeof(int)
  1. 遍历二维数组。可以使用双重循环遍历整个二维数组。
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << arr[i][j] << " ";
    }
    cout << endl;
}

2.4、使用示例

统计学生中每个人的平均成绩。
在这里插入图片描述

#include <iostream>
using namespace std;

int main()
{
	int arr[5][4]={
		{56,75,78,89},
		{89,98,76,67},
		{88,99,77,66},
		{67,78,89,90},
		{98,97,96,95}
	};
	int row=sizeof(arr)/sizeof(arr[0]);
	int col=sizeof(arr[0])/sizeof(arr[0][0]);

	int i=0,j=0;
	for(i=0;i<row;i++)
	{
		float sum=0.0f;
		for(j=0;j<col;j++)
		{
			sum+=arr[i][j];
		}
		cout<<"student "<<i+1<<" 的成绩总分:"<<sum<<endl;
		cout<<"student "<<i+1<<" 的成绩平均分:"<<sum/col<<endl;
	}
	return 0;
}

总结

C++中的数组是一种常用的数据结构,可以用来存储和操作多个相同类型的变量。在C++中,一维数组和二维数组是最常见的两种数组类型。

  1. 一维数组

一维数组是由一个固定长度的、连续的、相同类型的元素序列组成。它可以表示向量、字符串等单行单列的数据集合。

  • 定义:使用数据类型和元素个数定义一个数组。
int arr[5]; // 定义包含5个整型元素的一维数组
  • 初始化:手动或自动初始化一个数组。
int arr[5] = {1, 2, 3, 4, 5}; // 手动初始化
int arr[5] = {};              // 自动初始化为0
  • 访问:使用下标访问指定位置的元素。
int a = arr[0];    // 获取第一个元素
arr[1] = 10;       // 将第二个元素赋值为10
  • 遍历:使用循环遍历整个数组。
for (int i = 0; i < n; i++) {
    cout << arr[i] << " ";
}
  1. 二维数组

二维数组是由固定大小、连续的、相同类型的元素序列组成,它可以表示矩阵、表格等具有行列结构的数据集合。

  • 定义:使用数据类型和行列数定义一个二维数组。
int arr[3][4]; // 定义包含3行4列整型元素的二维数组
  • 初始化:手动或自动初始化一个二维数组。
int arr[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; // 手动初始化
int arr[3][4] = {};                                           // 自动初始化为0
  • 访问:使用两个下标访问指定位置的元素。
int a = arr[0][0];    // 获取第一行第一列的元素
arr[1][2] = 10;       // 将第二行第三列的元素赋值为10
  • 遍历:使用双重循环遍历整个二维数组。
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        cout << arr[i][j] << " ";
    }
    cout << endl;
}

在这里插入图片描述

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

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

相关文章

​LeetCode解法汇总1091. 二进制矩阵中的最短路径

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a;力扣 描述&#xff1a; 给你一个 n x n 的二进制矩阵 grid 中&#xff0c;返回矩阵中最短 畅通路径 的长…

修改优美移动端中间的老师的轮播图

副标题在高级内容那&#xff0c;如果缩略图上传不上去。那就是改一下图片名字&#xff0c;多刷新几次试试

Java程序设计入门教程--整数类型

举例 int x123; //指定变量x为int型&#xff0c;且赋初值为123 byte b8; //指定变量b为byte型&#xff0c;且赋初值为8 short s10; //指定变量s为short型&#xff0c;且赋初值为10 long y123L,z123l; //指定变量y,z为long型&#xff0c;且分别赋初值为123 示例代…

公文写作素材:为人处世类过渡句50例

1.身处逆境&#xff0c;敢于亮剑&#xff0c;坚毅前行&#xff0c;方能逆势突围&#xff1b;面对困难&#xff0c;坚定信心&#xff0c;敢拼敢闯&#xff0c;定能笑到最后。 2.没有海纳百川的胸怀&#xff0c;怎能容得下不同性格的人&#xff1b;没有从善如流的雅量&#xff0…

Python中处理无效数据的详细教程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

云原生之深入解析Kubernetes的网络模型

一、前言 Kubernetes 是为运行分布式集群而建立的&#xff0c;分布式系统的本质使得网络成为 Kubernetes 的核心和必要组成部分&#xff0c;了解 Kubernetes 网络模型可以使你能够正确运行、监控和排查应用程序故障。网络所涉及的内容很多&#xff0c;拥有许多成熟的技术。对于…

chatgpt赋能python:Python做GUI:介绍与优化SEO

Python做GUI&#xff1a;介绍与优化SEO Python是一种受欢迎的编程语言&#xff0c;尤其是在数据分析和开发领域。但是&#xff0c;Python也可以用于GUI&#xff08;图形用户界面&#xff09;应用程序的开发。在本文中&#xff0c;我们将介绍Python GUI开发的基础知识&#xff…

滤镜美颜sdk的实现方式和工作流程:从技术层面了解美颜算法

众所周知&#xff0c;实现美颜功能的核心技术之一就是滤镜美颜sdk。在本文中&#xff0c;我们将从技术层面来探讨滤镜美颜sdk的实现方式和工作流程&#xff0c;帮助读者更深入了解美颜算法。 一、美颜算法的基本原理 美颜算法的基本原理是通过图像处理技术&#xff0c;对人物…

第十八章_Redis缓存预热+缓存雪崩+缓存击穿+缓存穿透

缓存预热 缓存预热就是系统启动前&#xff0c;提前将相关的缓存数据直接加载到缓存系统。避免在用户请求的时候&#xff0c;先查询数据库&#xff0c;然后再将数据缓存的问题&#xff01;用户直接查询事先被预热的缓存数据。 可以通过PostConstruct初始化白名单数据 缓存雪崩 …

23种设计模式之命令模式(Command Pattern)

前言&#xff1a;大家好&#xff0c;我是小威&#xff0c;24届毕业生&#xff0c;在一家满意的公司实习。本篇文章将23种设计模式中的命令模式&#xff0c;此篇文章为一天学习一个设计模式系列文章&#xff0c;后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬不…

CASIA-FaceV5 抠出的人脸数据集

CASIA-FaceV5亚洲人脸数据集&#xff0c;以该数据集作为测试集所生成的同一人和不同人对应的测试文件。 CASIA-FaceV5亚洲人脸数据集有500人、每个人5张图片&#xff0c;共2500张图片&#xff0c;图片大小为640*480。数据集共有500个文件夹&#xff0c;文件夹名称为&#xff1…

【实战记录】手游内存优化(内存泄露检测)

故事背景&#xff1a; 手上有一个完整的页游项目&#xff0c;线上运营数据还不错&#xff0c;所以打算把这个项目手游化。因为这个项目本来就是用cocos的creator写的&#xff0c;所以手游化成本比较低&#xff0c;在修改了大概6~7个只能在页游上运行的接口后&#xff0…

Ansible介绍

文章目录 Ansible介绍Ansible的架构为什么要有Ansible TowerAnsible Tower Ansible介绍 Ansible是一种自动化工具&#xff0c;可以用于自动化部署、配置和管理IT基础设施。它是一种基于Python的开源软件&#xff0c;提供了一个简单易用的语言和工具集&#xff0c;使得自动化管…

内网渗透—代理Socks协议、路由不出网、SMB绕过、CS-MSF控制上线

内网渗透—代理Socks协议、路由不出网、SMB绕过、CS-MSF控制上线 1. 前言1.1. 实验背景1.2. 环境准备1.2.1. 环境介绍1.2.2. 环境测试 2. CS上线2.1. Windows2008上线2.2. Windows2003上线2.2.1. 设置socks代理2.2.2. 设置正向连接2.2.3. 生成木马2.2.4. 上线木马 2.3. Windows…

Flutter数据库操作看这一篇就够了

文章目录 Flutter常用数据库操作库最常用的sqflite介绍简介举例 依赖sqflite,单例模式封装一个sqlite操作类说明initDb说明conflictAlgorithm说明 Flutter常用数据库操作库 Flutter是一种跨平台的移动应用程序开发框架&#xff0c;支持使用多种类型的数据库进行数据存储和管理…

【CSDN快速获得铁粉小经验】厉昱辰的经验分享

如何快速的涨粉呢&#xff1f;今天将带领大家一起涨粉喽&#x1f970;&#x1f970;&#x1f973;&#x1f973; 一、最低阅读量过滤 官方算法进行最低阅读量过滤&#xff0c;阅读量太低的直接不参与热榜计算&#xff0c;刚创建的文章应该在其他渠道有一些冷启动的过程。但是阅…

c++ 11标准模板(STL) std::map(四)

定义于头文件<map> template< class Key, class T, class Compare std::less<Key>, class Allocator std::allocator<std::pair<const Key, T> > > class map;(1)namespace pmr { template <class Key, class T, clas…

150套开发板免费送!还有5G手机拿?米尔RZ/G2L开发板创意秀

人间最美五月天 不负韶华不负卿 米尔又来送板子了 不是3套&#xff0c;也不是4套 150套米尔RZ/G2L开发板 送&#xff01;免费&#xff01;板卡不回收&#xff01; 这是什么样的有奖活动&#xff1f; 米尔RZ/G2L开发板创意秀 为感谢广大客户一直以来的支持&#xff0c;推动…

15 个非常流行的VsCode插件,让你的编码效率倍增!

VS Code已经成为了最受欢迎的代码编辑器之一。 它的简洁性、易用性和可扩展性使得它成为了许多开发者的首选。 而在VS Code中&#xff0c;插件是其最大的卖点之一。 通过安装插件&#xff0c;你可以将VS Code打造成一个功能强大的开发环境&#xff0c;从而提高你的编码效率。…

【2023A题】电采暖负荷参与电力系统功率调节的技术经济分析(思路、代码)

目录 &#x1f4a5;1 概述 &#x1f4da;2 Matlab代码实现 &#x1f389;3 参考文献 &#x1f308;4 运行结果 &#x1f4a5;1 概述 建设以新能源为主体的新型电力系统是应对全球气候变化挑战的重要举措。高比例新能源接入导致电力系统调节能力稀缺&#xff0c;亟需开发新的调…