for (type &var : container) { /* ... */ }
type:元素類型 (可用 auto 推導)。&var:引用 (若需修改元素或避免拷貝);值傳遞則不加 &。container:支援範圍 for 的物件:陣列、STL 容器 (有 begin()/end())、初始化列表等。
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for (int x : arr) cout << x << ' '; // 輸出 1..10
// 修改元素
for (int &x : arr) x *= 2;
vector vec = {1,2,3,4,5};
for (auto &x : vec) cout << x << ' ';
// 也適用於 map, set, list 等
map mp = {{"a",1},{"b",2}};
for (auto &kv : mp) cout << kv.first << ':' << kv.second << '\n';
編譯器展開為迭代器循環:
auto && __range = container;
for (auto __begin = begin(__range), __end = end(__range); __begin != __end; ++__begin) {
type &var = *__begin;
// loop body
}
故容器必須提供 begin() 和 end() (或 ADL 找到自由函數)。
const 容器、臨時對象 (如 for (int x : {1,2,3}))。auto 類型推導極其方便。