
- C++ 基礎
- C++ 首頁
- C++ 概述
- C++ 環境設定
- C++ 基本語法
- C++ 註釋
- C++ Hello World
- C++ 省略名稱空間
- C++ 常量/字面量
- C++ 關鍵字
- C++ 識別符號
- C++ 資料型別
- C++ 數值資料型別
- C++ 字元資料型別
- C++ 布林資料型別
- C++ 變數型別
- C++ 變數作用域
- C++ 多個變數
- C++ 基本輸入/輸出
- C++ 修飾符型別
- C++ 儲存類
- C++ 運算子
- C++ 數字
- C++ 列舉
- C++ 引用
- C++ 日期和時間
- C++ 控制語句
- C++ 決策
- C++ if 語句
- C++ if else 語句
- C++ 巢狀 if 語句
- C++ switch 語句
- C++ 巢狀 switch 語句
- C++ 迴圈型別
- C++ while 迴圈
- C++ for 迴圈
- C++ do while 迴圈
- C++ Foreach 迴圈
- C++ 巢狀迴圈
- C++ break 語句
- C++ continue 語句
- C++ goto 語句
- C++ 建構函式
- C++ 建構函式和解構函式
- C++ 複製建構函式
- C++ 檔案處理
- C++ 檔案和流
- C++ 從檔案中讀取
C++ 中的 Foreach 迴圈
Foreach 迴圈也稱為**基於範圍的**for 迴圈,它是一種以簡單易讀的方式迭代容器(如陣列、向量、列表)中元素的方法,無需執行任何額外的效能操作,例如初始化、增量/減量和迴圈終止或退出條件。
語法
以下是 foreach 迴圈的語法:
for( data_type element_variable__name : container_name ){ // code to be executed }
這裡,
- **element_variable_name** 是賦給儲存在容器中的元素的變數名。
- **container_name** 是任何型別容器(例如陣列、向量、列表等)的變數名。
Foreach 迴圈的工作原理?
- foreach 迴圈迭代給定容器的所有元素。該過程從第一個元素開始,該元素被賦值給變數,如程式碼中所示的 **element_variable_name**。
- 然後,迴圈執行 foreach 迴圈的主體,允許您操作或使用這些元素。
- 處理當前元素後,迴圈移動到容器中的下一個元素。
- 此過程重複,直到到達容器的最後一個元素。
Foreach 迴圈示例
在這個例子中,基於範圍的 for 迴圈使用引用 (int& num) 允許您直接修改向量的每個元素。
#include <iostream> #include <vector> using namespace std; int main() { vector<int> digits = {10, 20, 30, 40, 50}; // Range-based for loop to modify each element for (int& num : digits) { num *= 2; // Double each number } for (int num : digits) { cout << num << " "; } cout << endl; return 0; }
輸出
20 40 60 80 100
使用向量的 Foreach 迴圈
foreach 迴圈可用於迭代向量元素。
示例
在這個例子中,我們使用 foreach 迴圈迭代並列印向量的元素。
#include <iostream> #include <vector> using namespace std; int main() { vector<int> numbers = {1, 2, 3, 4}; for (int num : numbers) { cout << num << " "; } return 0; }
輸出
1 2 3 4
使用列表的 Foreach 迴圈
類似地,foreach 迴圈也可用於迭代列表元素。
示例
在這個例子中,我們使用 foreach 迴圈迭代並列印列表的元素。
#include <iostream> #include <list> int main() { using namespace std; list<int> numbers = {10, 20, 30, 40, 50}; for (int num : numbers) { cout << num << " "; } cout << endl; return 0; }
輸出
10 20 30 40 50
For 迴圈與 Foreach 迴圈
for 迴圈根據給定條件執行語句集,而 foreach 迴圈(或基於範圍的 for 迴圈)迭代集合元素。考慮以下示例以瞭解 C++ 中 for 和 foreach 的區別:
標準方法:for 迴圈
以下是一個 for 迴圈的示例,我們在此列印整數陣列的元素:
#include<iostream> using namespace std; int main() { // an Array int arr[] = {1,2,3,4}; // Printing array elements using // for loop for (int i = 0; i <= 3; i++) { cout << i<<" "; } return 0; }
輸出
0 1 2 3
Foreach 迴圈方法
以下是一個 foreach 迴圈的示例,我們在此迭代並列印整數陣列的元素:
#include<iostream> using namespace std; int main() { int arr[] = {1,2,3,4}; // Where x is variable name provided to // elements inside container for(int x: arr) { cout<< x<<" "; } return 0; }
輸出
1 2 3 4
使用非容器型別的 Foreach 迴圈
通常,foreach 迴圈用於迭代陣列、向量、列表、雙端佇列、集合和對映等容器型別,但它也用於可迭代的非容器型別,這意味著它必須具有begin() 和 end() 方法,返回迭代器。
像向量和上面提到的所有其他傳統容器都固有地滿足這些要求,因此我們不需要專門為其指定 begin() 和 end()。
示例
以下示例演示了 foreach 迴圈與非容器型別元素一起工作的過程:
#include <iostream> #include <vector> using namespace std; class Iterable { public: // Constructor with initialization list Iterable(const vector<int>& v) : values(v) {} // Provide begin() and end() methods auto begin() const -> vector<int>::const_iterator { return values.begin(); } auto end() const -> vector<int>::const_iterator { return values.end(); } private: vector<int> values; }; int main() { Iterable myIterable({1, 2, 3, 4, 5}); for (int num : myIterable) { cout << num << " "; } cout << endl; return 0; }
輸出
1 2 3 4 5
這裡,
- 在上面的程式碼中,begin() 方法返回一個指向容器第一個元素的迭代器,而 end() 方法返回一個指向容器最後一個元素之後一個位置的迭代器。
- 然後迴圈使用 for() 遍歷迭代器上的每個向量元素/值,並將每個值列印到控制檯。
Foreach 迴圈的優點
以下是 C++ 中使用 Foreach 迴圈的優點:
- **簡潔性** - 它減少了樣板程式碼。
- **可讀性** - 與舊的標準傳統迴圈方法(如 for、while 和 do-while 迴圈)相比,它以一種簡單易讀的方式編寫程式碼。
- **安全性** - 它減少了與索引管理和極端情況相關的錯誤。
Foreach 迴圈的侷限性
以下是 foreach 迴圈的一些侷限性:
- **僅限於正向遍歷** - 它無法訪問反向迭代。
- **不可中斷遍歷** - 在到達最後一個索引或最後一個元素之前,沒有選項可以跳過任何元素或中斷迭代。
- **迭代時無法直接訪問元素** - 在使用 foreach 迴圈迭代時,無法直接訪問當前元素的索引或位置。
Foreach 迴圈的應用
- **只讀迭代** - 當用戶想要迭代元素而不進行任何修改時,foreach 迴圈是隻讀迭代的好選擇,因為它提供了更簡潔的程式碼。
- **遍歷容器** - 當我們想要遍歷任何型別的容器(如陣列、列表、向量)時,foreach 迴圈非常有用,因為此迴圈簡化了遍歷容器元素的過程。
- **簡單的修改** - 當我們想要執行任何簡單的操作時,它非常有用,因為它與舊的標準迭代程式碼編寫方法相比,它提供了更簡單、更容易和更易讀的程式碼。
- **使用非容器型別** - 它也適用於滿足可迭代要求的任何型別,其中包括 begin() 和 end()。
廣告