C primer 六 範圍for語句

2021-07-25 05:51:41 字數 1271 閱讀 7141

c++11新標準引入了一種更簡單的for語句,這種語句可以遍歷容器或其他序列的所有元素。範圍for語句(range for statement)的語法形式是:

for (declaration : expression) 

statement

表示的必須是乙個序列,比如用花括號括起來的初始值列表、陣列或者vector或string等型別的物件,這些類 型的共同特點是擁有能返冋迭代器的begin和end成員。

declaration 定義乙個變數,序列中的每個元素都得能轉換成該變數的型別。確保型別相容最簡單的辦法是使用auto型別說明符,這個關鍵字可以令編譯器幫助我們指定合適的型別。如果需要對序列中的元素執 行寫操作,迴圈變數必須宣告成引用型別。

每次迭代都會重新定義迴圈控制變數,並將其初始化成序列中的下乙個值,之後才會執行statement。像往常一樣,  statement可以是一條單獨的語句也可以是乙個塊。所有元素 都處理完畢後迴圈終止。

之前我們已經接觸過幾個這樣的迴圈。接下來的例子將把vector物件中的每個元素 都翻倍,它涵蓋了範圍for語句的幾乎所有語法特徵:

vectorv = ;

//範圍變數必須是引用型別,這樣才能對元素執行寫操作

for (auto &r : v) //對於v中的每乙個元素

r *= 2; //將v中每個元素的值翻倍

for語句頭宣告了迴圈控制變數r,並把它和v關聯在一起,我們使用關鍵字auto令編 譯器為r指定正確的型別。由於準備修改v的元素的值,因此將r宣告成引用型別。此 時,在迴圈體內給r賦值,即改變了 r所繫結的元素的值。

for (auto beg = v.begin(), end = v.end(); beg i = end; ++beg)

{

auto &r = *beg; // r必須是引用型別,這樣才能對元素執行寫操作

r*=2; //將v中每個元素的值翻倍

學習了範圍for語句的原理之後,我們也就不難理解為什麼強調不能通過範圍for語句增加vector物件(或者其他容器)的元素了。在範圍for語句

C primer 第六章 語句

1 有些程式設計風格建議總是在if後面使用花括號,這樣做可以避免日後修改 時產生混亂和錯誤。塊語句使用花括號是乙個比較好的做法。2 break語句用於結束最近的while do while for或者switch語句,並將程式的執行權傳遞給緊接在被終止語句之後的語句 跳出包含它的最裡層的迴圈,比如是...

C Primer第六章語句筆記

switch語句 一般存在乙個普遍的誤解,以為程式只會執行匹配的case標號相關聯的語句.實際上,程式從該點開始執行,並跨越case邊界繼續執行其它語句,直到switch結束或者遇到break語句為止.char ch int acnt 0,ecnt 0,icnt 0,ocnt 0,ucnt 0 若c...

範圍for語句

c 11 新標準引入了一種更簡單的for語句,這種語句可以遍歷容器或其他序列的所有元素。範圍for語句 range for statement 的語法形式是 for declaration expression statement expression表示的必須是乙個序列,比如用花括號括起來的初始值...