在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),這是避免錯誤的關鍵!
通過多練習不同的遍歷方法,你會逐漸熟悉數組和循環的組合使用,爲後續更復雜的編程打下基礎。