首页 > 编程语言 >C++ 获取数组大小、多维数组操作详解

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

时间:2024-04-10 20:33:05浏览次数:13  
标签:letters cout 示例 int C++ 数组 多维

获取数组的大小

要获取数组的大小,可以使用 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,关注后即可获取最新文章推送

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

标签:letters,cout,示例,int,C++,数组,多维
From: https://www.cnblogs.com/xiaowange/p/18127353

相关文章

  • C++ Primer Plus(第6版):封装、继承与多态
    C语言编程原理C语言在最初面试时是一种过程性(procedural)语言,这意味着它强调的是编程的算法方面,程序命令计算机按照一系列流程生成特定的结果。但是随着程序规模的扩大,程序经常使用分支语句,很多旧式程序的执行路径很混乱(被称为“意大利面条式编程”,突出一个混乱程度)。计算机科学家......
  • 最大连续子数组和(最大子段和)
    作业信息 沈阳航空航天大学计算机学院2024软件工程作业课程目标 熟悉一个“高质量”软件的开发过程作业目标 单元测试练习请在作业最后部分填写如下表格记录本次工作详细信息项目 记录结果日期 2024.4.10开始时间 2024.4.9结束时间 2024.4.10结束时间 2024.4.10编码行数 ......
  • 突破编程_C++_网络编程(Windows 套接字(阻塞模式与非阻塞模式))
    1阻塞模式与非阻塞模式的概念(1)阻塞模式概念:在阻塞模式下,当套接字执行I/O操作时,如果操作不能立即完成,调用函数会一直等待直到操作完成。在等待期间,执行操作的线程会被阻塞,无法继续执行其他任务。特点:简单直观:对于许多简单的网络应用来说,阻塞模式编程简单直观,易于理......
  • c++11实现线程池
    c++11实现线程池c++线程库thread创建线程和同步的方式jion,detach#include<iostream>#include<thread>voidprintf_hw(std::strings){ std::cout<<s<<"\n";}intmain(){ std::threada(printf_hw,"nihao"); //a.join();//同步 a.de......
  • [C++] 小游戏 斗破苍穹 2.10.1 版本 zty出品
    目录前言先赞后看 养成习惯正文后记前言   大家好,今天zty(<-痧蔽)带来的是斗破苍穹2.10.1版本本版本为战斗更新加入了四个新怪物和四个新装备并且修复了许多bug,希望大家喜欢,今天的赞不多要要50个就够了先赞后看 养成习惯正文#include<stdio.h>#inc......
  • JAVA数组
    1.1数组的概念所谓数组(array),就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,以便统一管理他们,然后用编号区分他们,这个名字称为数组名,编号称为下标或索引(index)。组成数组的各个变量称为数组的元素(element)。数组中元素的个数称为数......
  • 小美的数组构造(美团2024届秋招笔试第二场编程真题)
    题面核心思想dp[i][j]表示前i个数字和为j时的组合数那么第i个数的取法有1<=k<=j需要遍历第i个数取k前i-1个数取j-k时dp[i][j]=(dp[i][j]+dp[i-1][j-k])%MOD;注意是和为j第i个数取k所以是dp[i][j]。同时需要判断第i个数不能和a数组取相同的......
  • 数组1
    (一),一维数组(1)一维数组的创建和使用数组时一组相同元素的集合type_t   arr_name   [const_n];//type_t 是指数组的元素类型//const_n是一个常量表达式,用来指定数组的大小(2)一维数组的大小1,strlen和sizeof没有什么关联2,strlen是求字符串长度的-只能针对字符......
  • template—模板初阶(C++)
        本篇将会对Cpp中的模板进行一个简单的介绍(后序还关系模板进阶,对模板的内容进行更深入的讲解),其中包括模板的使用:函数模板、类模板,以及对于泛型编程的理解。其中的重点为函数模板,介绍了函数模板的原理、隐式实例化和显示实例化、还有模板参数的匹配规则。目录如下......
  • 内存管理new and delete(C++)
        在本篇中,将会较为详细的介绍在Cpp中的两个新操作符new和delete,将会介绍其中的底层原理,以及这两个操作符的使用方法。其中还介绍了new/delete操作符使用的细节,还扩展了一些有关定位new表达式的知识点。最后总结了malloc/free与new/delete的区别。目......