C++数组与循环:遍历数组的几种方法

在C++中,数组是存储多个相同类型数据的集合,而循环则是重复执行代码块的工具。当我们需要处理数组中的每一个元素时,就需要用到“遍历”数组的方法。今天我们就来看看C++中遍历数组的几种常见方式,从简单到进阶,适合初学者逐步掌握。

一、数组基础回顾

首先,我们得知道数组是什么。数组是一组相同类型的数据,在内存中连续存储。比如定义一个包含5个整数的数组:

int arr[5] = {1, 2, 3, 4, 5};  // 定义一个有5个元素的数组,元素值为1~5

这里要注意:数组的索引从0开始,所以第一个元素是arr[0],第二个是arr[1],最后一个是arr[4](因为5个元素的索引是0~4)。

二、为什么需要遍历数组?

遍历数组就是逐个访问数组中的每个元素,常见用途包括:
- 打印所有元素(比如输出数组内容)
- 计算元素总和、平均值、最大值
- 修改数组元素(比如每个元素加1)

要实现遍历,循环是最常用的工具。接下来我们看看几种循环+数组的组合方式。

三、遍历数组的方法

方法1:传统for循环(带索引)

这是最基础的遍历方式,通过循环变量i作为数组索引,依次访问每个元素。
步骤
1. 定义数组和循环变量i
2. 循环条件:i小于数组长度(注意数组长度是n时,索引最大为n-1
3. 循环体:通过arr[i]访问第i个元素,执行操作(如打印、计算等)
4. 更新循环变量i(自增1)

代码示例

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);  // 计算数组长度(5)

    // 遍历数组
    for (int i = 0; i < n; ++i) {
        cout << "第" << i << "个元素:" << arr[i] << endl;
    }
    return 0;
}

输出

第0个元素:1
第1个元素:2
第2个元素:3
第3个元素:4
第4个元素:5

适用场景:需要知道元素索引(比如要修改特定位置的元素,或根据索引计算结果)。

方法2:while循环遍历数组

和for循环类似,while循环也可以通过索引i遍历数组,只是结构不同(先判断条件,再执行循环体)。
代码示例

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int i = 0;  // 初始化索引变量

    while (i < n) {  // 条件:i小于数组长度
        cout << "元素:" << arr[i] << endl;
        i++;  // 更新索引(和for循环的i++作用相同)
    }
    return 0;
}

输出和方法1相同。
注意:while循环需要手动管理循环变量i的初始化和更新,容易忘记写i++导致死循环,所以初学者建议优先掌握for循环。

方法3:范围for循环(C++11及以上)

这是C++11引入的简洁遍历方式,不需要手动写索引,直接遍历数组中的每个元素。
语法

for (元素类型 变量名 : 数组名) {
    // 操作每个元素(变量名即为当前元素值)
}

代码示例

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};

    // 遍历数组,变量num依次取每个元素值
    for (int num : arr) {
        cout << "当前元素:" << num << endl;
    }
    return 0;
}

输出

当前元素:1
当前元素:2
当前元素:3
当前元素:4
当前元素:5

关键点
- 变量num复制数组中的每个元素值,而不是引用原数组元素。如果要修改原数组元素,需用引用类型:for (int& num : arr)(注意&符号)。
- 适用场景:只需要访问元素值,不需要索引(比如打印所有元素、求和等)。

方法4:指针遍历数组(底层理解)

数组名本质是数组首元素的地址(即指针),可以通过指针变量遍历数组。这种方式更贴近底层,适合理解数组的存储方式,但初学者可以先了解。
代码示例

#include <iostream>
using namespace std;

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    int* p = arr;  // p指向数组首元素(arr等价于&arr[0])

    // 通过指针遍历:*p表示当前元素,p++移动到下一个元素
    for (int i = 0; i < n; ++i) {
        cout << "元素:" << *p << endl;  // *p 等价于 arr[i]
        p++;  // 指针后移一位(等价于i++)
    }
    return 0;
}

输出同上。
补充:也可以用p[i]代替*p(数组名arr是指针,所以arr[i]等价于*(arr + i),即p[i]等价于*(p + i))。

四、方法对比与选择

方法类型 优点 缺点 适用场景
传统for循环 可灵活用索引(i) 需要手动写i的范围 需要修改索引位置、计算总和等
范围for循环 代码简洁,无需索引 无法直接修改原数组元素(需用引用) 仅需元素值、简单遍历
while循环 结构直观(先判断后执行) 易忘记更新i导致死循环 需结合条件动态控制循环次数
指针遍历 底层理解数组存储 对初学者较难 底层编程、优化性能

五、总结

遍历数组是C++编程的基础技能,初学者建议优先掌握:
1. 传统for循环(带索引):万能基础,适合大多数场景。
2. 范围for循环:C++11及以上推荐,简洁高效,适合简单遍历。

如果需要更复杂的操作(如动态调整索引、修改元素),可以结合while循环或指针遍历进一步学习。记住:数组索引从0开始,循环条件要避免越界(i < n而不是i <= n),这是避免错误的关键!

通过多练习不同的遍历方法,你会逐渐熟悉数组和循环的组合使用,为后续更复杂的编程打下基础。

Xiaoye