经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
C++ 获取数组大小、多维数组操作详解
来源:cnblogs  作者:小万哥丶  时间:2024/4/11 10:53:41  对本文有异议

获取数组的大小

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

示例

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

结果:

  1. 20

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

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

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

示例

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

结果:

  1. 5

使用 sizeof() 循环遍历数组

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

与其写:

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

最好写成:

示例

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

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

示例

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

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

多维数组

多维数组是数组的数组。

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

  1. string letters[2][4];

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

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

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

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

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

访问多维数组的元素

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

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

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

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

更改多维数组中的元素

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

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

循环遍历多维数组

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

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

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

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

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

为什么使用多维数组?

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

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

// 通过这些变

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

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

最后

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

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

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

原文链接:https://www.cnblogs.com/xiaowange/p/18127353

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号