获取数组的大小

要获取数组的大小,可以使用 sizeof() 运算符:

示例

int myNumbers[5] = {10, 20, 30, 40, 50};
cout << sizeof(myNumbers);

结果:

20

为什么结果显示为 20 而不是 5,当数组包含 5 个元素时?

这是因为 sizeof() 运算符返回类型的大小(以字节为单位)。

要找出数组有多少个元素,必须将数组的大小除以它包含的数据类型的大小:

示例

int myNumbers[5] = {10, 20, 30, 40, 50};
int getArrayLength = sizeof(myNumbers) / sizeof(int);
cout << getArrayLength;

结果:

5

使用 sizeof() 循环遍历数组

然而,通过使用上面示例中的 sizeof() 方法,现在我们可以创建适用于任何大小数组的循环,这更加可持续。

与其写:

int myNumbers[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < 5; i++) {
cout << myNumbers[i] << "\n";
}

最好写成:

示例

int myNumbers[5] = {10, 20, 30, 40, 50};
for (int i = 0; i < sizeof(myNumbers) / sizeof(int); i++) {
cout << myNumbers[i] << "\n";
}

请注意,在 C++ 版本 11(2011)中,还可以使用“for-each”循环:

示例

int myNumbers[5] = {10, 20, 30, 40, 50};
for (int i : myNumbers) {
cout << i << "\n";
}

了解不同的数组循环方式是很重要的,因为你可能在不同的程序中都会遇到它们。

多维数组

多维数组是数组的数组。

要声明一个多维数组,请定义变量类型,指定数组名称,后跟方括号,指定主数组有多少元素,然后再跟另一组方括号,表示子数组有多少元素:

string letters[2][4];

与普通数组一样,你可以使用数组文字 - 在花括号内部的逗号分隔列表。在多维数组中,数组文字中的每个元素都是另一个数组文字。

string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};

数组声明中的每组方括号都会向数组添加另一个维度。像上面的数组被称为具有两个维度的数组。

数组可以具有任意数量的维度。数组的维度越多,代码就越复杂。以下数组具有三个维度:

string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
};

访问多维数组的元素

要访问多维数组的元素,请在数组的每个维度中指定索引号。

此语句访问 letters 数组中第一行(0)和第三列(2)的元素的值。

string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
}; cout << letters[0][2]; // 输出 "C"

记住:数组索引从 0 开始:[0] 是第一个元素。[1] 是第二个元素,依此类推。

更改多维数组中的元素

要更改元素的值,请引用每个维度中元素的索引号:

string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
};
letters[0][0] = "Z"; cout << letters[0][0]; // 现在输出 "Z" 而不是 "A"

循环遍历多维数组

要循环遍历多维数组,你需要为数组的每个维度使用一个循环。

以下示例输出 letters 数组中的所有元素:

string letters[2][4] = {
{ "A", "B", "C", "D" },
{ "E", "F", "G", "H" }
}; for (int i = 0; i < 2; i++) {
for (int j = 0; j < 4; j++) {
cout << letters[i][j] << "\n";
}
}

此示例显示如何循环遍历三维数组:

string letters[2][2][2] = {
{
{ "A", "B" },
{ "C", "D" }
},
{
{ "E", "F" },
{ "G", "H" }
}
}; for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
cout << letters[i][j][k] << "\n";
}
}
}

为什么使用多维数组?

多维数组非常适合表示网格。此示例展示了它们的实际用途。在以下示例中,我们使用多维数组表示一个小型的战舰游戏:

// 我们放置 “1” 来表示那里有一艘船。
bool ships[4][4] = {
{ 0, 1, 1, 0 },
{ 0, 0, 0, 0 },
{ 0, 0, 1, 0 },
{ 0, 0, 1, 0 }
};

// 通过这些变

量跟踪玩家击中了多少船以及玩家已经玩了多少轮

int hits = 0;
int numberOfTurns = 0; // 允许玩家继续进行,直到他们击中了所有四艘船
while (hits < 4) {
int row, column; cout << "选择坐标\n"; // 要求玩家输入一行
cout << "选择 0 到 3 之间的行号:";
cin >> row; // 要求玩家输入一列
cout << "选择 0 到 3 之间的列号:";
cin >> column; // 检查这些坐标是否存在船只
if (ships[row][column]) {
// 如果玩家击中了一艘船,将其删除并将值设置为零。
ships[row][column] = 0; // 增加击中计数器
hits++; // 告诉玩家他们击中了一艘船以及剩下多少艘船
cout << "命中!剩下 " << (4-hits) << " 艘船。\n\n";
} else {
// 告诉玩家他们没击中
cout << "未命中\n\n";
} // 计算玩家进行了多少轮
numberOfTurns++;
} cout << "胜利!\n";
cout << "你在 " << numberOfTurns << " 轮内获胜";

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎点赞、收藏、关注

C++ 获取数组大小、多维数组操作详解的更多相关文章

  1. PHP 获取数组是几维数组

    // 判断数组是几维数组$data = array(); // 是你要判断的数组$al = array(0);function aL($data,&$al,$level=0){ if(is_a ...

  2. java基础5 (一维)数组和二维数组

    本文知识点(目录): 一维数组(一维数组的概念.优点.格式.定义.初始化.遍历.常见异常.内存分析以及常见操作(找最大值.选择排序.冒泡排序等等))    二维数组(二维数组的遍历.排序.查找.定义. ...

  3. 【Java学习笔记之八】java二维数组及其多维数组的内存应用拓展延伸

    多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在 ...

  4. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...

  5. 【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸

    多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在 ...

  6. 一维数组、二维数组——Java

    一. 一维数组 1.  数组是相同类型数据的有序集合 相同类型的若干个数据,按照一定先后次序排列组合而成 每个数组元素可以通过一个下标来访问它们 其中,每一个数据称作一个数组元素 2. 数组特点: 其 ...

  7. C语言初级阶段4——数组2————二维数组

    C语言初级阶段4--数组2----二维数组 二维数组的定义:类型说明符 数组名[数组大小] [数组大小] 第一个大小是行的大小,第二个大小是列的大小. 二维数组的初始化:{} #include< ...

  8. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

  9. C#的一维数组和二维数组定义方式:

    一维数组: //一维数组定义与初始化 ,, };//第一种方式 , , }; //第二种方式 int[] one3; //第三种方式 one3=,,}; 二维数组: //二维数组定义与初始化 //不规 ...

  10. C#中的数组,多维数组和交错数组

    想研究一些面向对象的东西,也许是代码写得还不够多.感觉还不好,看那些教程,不是嫌太水就是太难看不懂.心情很是落寞 不过再怎样也要坚持每天发一篇博客. 这篇来说一下C#中的数组,多维数组,交错数组的一些 ...

随机推荐

  1. 【Azure Redis】Redis服务负载达到100%后的影响及有何优化方法

    问题描述 Redis服务负载达到100%后的影响及有何优化方法 问题解答 Redis的负载达到100% 意味着 Redis 服务器繁忙,无法跟上请求,导致客户端发送出来的请求超时. 常规情况下有一下几 ...

  2. 【Azure 存储服务】如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?

    问题描述 如何查看Storage Account的删除记录,有没有接口可以下载近1天删除的Blob文件信息呢?因为有时候出现误操作删除了某些Blob文件,想通过查看删除日志来定位被删除的文件信息. 问 ...

  3. 【Azure 应用服务】App Service的运行状况检查功能失效,一直提示"实例运行不正常"

    问题描述 为App Service配置了健康检查,单独访问Health Check Path的路径,返回代码为200.但为什么在App Service的页面上,一直提示"实例运行不正常&qu ...

  4. 【Azure Developer】使用 Azure PowerShell 执行 Azure 表存储操作时遇见的4个问题

    要使用PowerShell操作Azure的表存储,需要经过以下步骤: 1:必须安装 Az 和 AzTable 模块.安装命令为: #安装 Az 模块 Install-Module -Name Az - ...

  5. mysql-添加、删除索引

    -- 添加联合唯一索引 alter table b_report_file add unique index nc (name, code, org_id); -- 删除索引 ALTER TABLE ...

  6. map 简单梳理【GO 基础】

    〇.map 简介 map 是一种无序的基于 key-value 的数据结构,Go 语言中的 map 是引用类型,必须初始化才能使用. 其中键可以是任何类型,但值必须是可比较的类型(如整数.字符串.布尔 ...

  7. 添加 alt + d 打开 dicts.cn 网址

    代码 autohotkey 代码 限制在双核浏览器 内部使用 #IfWinActive ahk_exe ChromeCore.exe !d:: Run, http://www.dicts.cn/ Re ...

  8. Jenkins 批量修改Job的配置

    登录Jenkins机器,执行 以下shell 脚本 --单文件替换 sed -i "s#xxxxx#xxxxxx#g" /var/lib/docker/volumes/jenkin ...

  9. Android Material组件库(日期选择和时间选择器)基本使用

    原文:Android Material组件库(日期选择和时间选择器)基本使用 - Stars-One的杂货小窝 简单的封装下Material组件里的日期选择器和时间选择器的使用方法 效果 代码 需要添 ...

  10. eclipse错误之Errors occurred during the build. Errors running builder 'JavaScript Validator' on project

    把JavaScript Validator去掉.去掉的方法是:选择一个项目--右键Properties--Builders(排第二)--点一下右侧会有四项--取消第一项"JavaScript ...