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),這是避免錯誤的關鍵!

通過多練習不同的遍歷方法,你會逐漸熟悉數組和循環的組合使用,爲後續更復雜的編程打下基礎。

小夜