基於範圍的for迴圈 C 11

2021-10-01 06:26:53 字數 1619 閱讀 3111

本篇部落格會寫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就可以這樣做:

void

testfor()

;for

(auto e :array)

for(

auto e : array)

return0;

}

相對於第一種麻煩的方法,第二種方法中e就是array裡每乙個資料,依次取出來,然後輸出,這種更簡單的方法就是在c++11中引入的基於範圍的for迴圈。

for迴圈後的括號由冒號「 :」分為兩部分:第一部分是範圍內用於迭代的變數,第二部分則表示被迭代的範圍。範圍for與普通迴圈類似,也能用continue結束本次迴圈,也可以用break跳出整個迴圈。

但是當我們執行第二段**後,得到的結果卻是:

原因是auto e表示e是a的範圍內迭代,不能修改其內容,所以我們可以得出幾種情況:

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;

}

對於陣列而言,就是陣列中第乙個元素和最後乙個元素的範圍;對於類而言,應該提供begin和end的方法,begin和end就是for迴圈迭代的範圍(迭代器)。

注意:以下**就有問題,因為array不是乙個陣列,它是乙個指標,for的範圍不確定。

void

testfor

(int array)

總結來說for迴圈的好處就是十分方便了我們的使用。

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...