本篇部落格會寫c++11標準的中的乙個新特性範圍for,並解釋它的使用方法。
那麼什麼是範圍for呢?在使用早期c++標準的遍歷乙個陣列,我們會使用這段**:
執行結果如下:void
testfor()
;for
(int i =
0; i <
sizeof
(array)
/sizeof
(array[0]
);++i)
//普通迴圈
for(
int* p = array; p < array +
sizeof
(array)
/sizeof
(array[0]
);++p)
//指標遍歷
}
而在c++11標準後,我們使用auto和範圍for就可以這樣做:
相對於第一種麻煩的方法,第二種方法中e就是array裡每乙個資料,依次取出來,然後輸出,這種更簡單的方法就是在c++11中引入的基於範圍的for迴圈。void
testfor()
;for
(auto e :array)
for(
auto e : array)
return0;
}
for迴圈後的括號由冒號「 :」分為兩部分:第一部分是範圍內用於迭代的變數,第二部分則表示被迭代的範圍。範圍for與普通迴圈類似,也能用continue結束本次迴圈,也可以用break跳出整個迴圈。
但是當我們執行第二段**後,得到的結果卻是:
原因是auto e表示e是a的範圍內迭代,不能修改其內容,所以我們可以得出幾種情況:
對於陣列而言,就是陣列中第乙個元素和最後乙個元素的範圍;對於類而言,應該提供begin和end的方法,begin和end就是for迴圈迭代的範圍(迭代器)。void
testfor()
;for
(auto e :array)
//拷貝,不能修改
e*=2
;for
(auto
& e :array)
//別名+修改
e*=2
;for
(const
auto
& e :array)
//別名+唯讀
e*=2
;for
(auto e : array)
cout << e <<
" ";
return0;
}
注意:以下**就有問題,因為array不是乙個陣列,它是乙個指標,for的範圍不確定。
總結來說for迴圈的好處就是十分方便了我們的使用。void
testfor
(int array)
C 11 基於範圍的for迴圈和靜態斷言
在c 中for迴圈可以使用基於範圍的for迴圈,示例 如下 include using namespace std void test01 int n sizeof arr sizeof arr 0 for int i 0 i n i cout endl for int tmp arr cout e...
auto關鍵字與範圍for迴圈語句(C 11)
1.auto關鍵字 自動型別推導 在c 11中auto有了全新的含義 auto不再是乙個儲存型別指示符,而是作為乙個新的型別指示符來指示編譯器,auto宣告的變數必須由編譯器在編譯時期推導而得 1.舉幾個例子 int testauto intmain 需要注意的是auto並不能代表乙個實際的型別宣告...
基於範圍的for迴圈
1.範圍for的語法 在c 98中如果要遍歷乙個陣列,可以按照以下方式進行 void testfor for int i 0 i sizeof array sizeof array 0 i array i 2 for int p array p array sizeof array sizeof a...