C++ 获取数组大小、多维数组操作详解

获取数组的大小

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

示例

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

结果:

120

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

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

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

示例

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

结果:

15

使用 sizeof() 循环遍历数组

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

与其写:

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

最好写成:

示例

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

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

示例

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

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

多维数组

多维数组是数组的数组。

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

1string letters[2][4];

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

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

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

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

1string letters[2][2][2] = { 2 { 3 { "A", "B" }, 4 { "C", "D" } 5 }, 6 { 7 { "E", "F" }, 8 { "G", "H" } 9 } 10};

访问多维数组的元素

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

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

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

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

更改多维数组中的元素

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

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

循环遍历多维数组

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

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

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

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

1string letters[2][2][2] = { 2 { 3 { "A", "B" }, 4 { "C", "D" } 5 }, 6 { 7 { "E", "F" }, 8 { "G", "H" } 9 } 10}; 11 12for (int i = 0; i < 2; i++) { 13 for (int j = 0; j < 2; j++) { 14 for (int k = 0; k < 2; k++) { 15 cout << letters[i][j][k] << "\n"; 16 } 17 } 18}

为什么使用多维数组?

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

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

// 通过这些变

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

1int hits = 0; 2int numberOfTurns = 0; 3 4// 允许玩家继续进行,直到他们击中了所有四艘船 5while (hits < 4) { 6 int row, column; 7 8 cout << "选择坐标\n"; 9 10 // 要求玩家输入一行 11 cout << "选择 0 到 3 之间的行号:"; 12 cin >> row; 13 14 // 要求玩家输入一列 15 cout << "选择 0 到 3 之间的列号:"; 16 cin >> column; 17 18 // 检查这些坐标是否存在船只 19 if (ships[row][column]) { 20 // 如果玩家击中了一艘船,将其删除并将值设置为零。 21 ships[row][column] = 0; 22 23 // 增加击中计数器 24 hits++; 25 26 // 告诉玩家他们击中了一艘船以及剩下多少艘船 27 cout << "命中!剩下 " << (4-hits) << " 艘船。\n\n"; 28 } else { 29 // 告诉玩家他们没击中 30 cout << "未命中\n\n"; 31 } 32 33 // 计算玩家进行了多少轮 34 numberOfTurns++; 35} 36 37cout << "胜利!\n"; 38cout << "你在 " << numberOfTurns << " 轮内获胜";

最后

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

java 基础知识

遍历遍历就是把这个数组的每个元素显示出来遍历的方法就是先定义这个数组的大小,然后用FOR循环来完成数组,例如doublescorenewdouble5;ScannerinputnewScanner(System.in);for(inti0;i<score.l

Java开发者容易犯的十个错误

!(https://oscimg.oschina.net/oscnet/c9f00cc918684fbe8a865119d104090b.gif)Top1.数组转换为数组列表将数组转换为数组列表,开发者经常会这样做:\java\List<StringlistArrays.asList(arr);Arr

JavaScript中遍历数组和对象的方法

js数组遍历和对象遍历针对js各种遍历作一个总结分析,从类型用处,分析数组和对象各种遍历使用场景,优缺点等JS数组遍历:1,普通for循环,经常用的数组遍历vararr1,2,0,3,9,10,20,

Java基础14

1.二位数组可以看成以数组为元素的数组2.java中多维数组的声明和初始化一样,应该从高维到低维的顺序进行,例如1intanewint3;2a0newint2;3a1newint4;4a2newint3;5inttnew

ASMSupport教程4.11 生成数组操作

<p在任何语言里,数组都是基本的数据类型,我们这一节将讲述如何生成数组操作。</p<p数组操作包括以下几个:</p<ol<li创建数组</li<li获取数组长度</li<li获取数组每个元素的内容</li<li为数组元素赋值</li</ol<p我们接下来对每种操作进行详解。</p<h3<fonts