基於報表範圍

2021-06-21 03:41:53 字數 1266 閱讀 1739

基於報表範圍

在c + + 03,一步一步通過乙個序列的所有值,需要大量的**,尤其是當使用迭代器語法:

1為std::向量(< int >::迭代器itr = myvector begin();itr!= myvectorend();+ + itr)

在c + + 11,自動關鍵字使這一點:

1對(汽車itr = myvector begin();itr!= myvector end();+ + itr)

但這是乙個常見的模式是c + + 11引入了乙個更簡單的語法讓我們遍歷序列,稱為基於範圍的語句(或有時被稱為「每」):12

34對(x:myvector)/ / x是唯讀的

你能把這個作為「在myvector「x的每個值。

如果你想修改x的值,你可以使x參考12

34對(汽車、x:myvector)/ / x是可變的

這個語法為c樣式陣列和任何支援乙個迭代器通過begin()和end()功能。這包括所有標準庫容器類(包括std::string)和initialization_list(我們將在下一課蓋)。你也可以讓它為你的自定義類定義迭代器風格begin()和end()成員函式。如果你使用的是舊的類不支援begin()和end()成員函式,你可以寫的自由站立的開始和結束(x)(x)的功能和語法仍然會工作。

static_assert

這可以讓你做的事情一樣,確保變數的大小是你所期待的:

1static_assert(sizeof(int)>=4,「int需要4個位元組來使用此**」);

注意,因為static_assert是在編譯時檢查的,它不能被用於評估依賴於執行時的值假設。static_asserts主要用於檢查大小的東西通過sizeof()或確定#定義的值在一定的範圍內。

乙個你能做的最有用的事情是static_assert斷言是否你的編譯器支援c + + 11檢查是否__cplusplus值大於199711l:

1static_assert(__cplusplus > 199711l,「程式需要c++編譯器11能」);

你可能會懷疑是否有多餘的檢查__cplusplus由於編譯器不支援static_assert將丟擲乙個編譯錯誤,當他們到達static_assert線。答案是不是多餘的,因為許多編譯器(包括visual studio 2010)為c + + 11的部分支援,可能沒有乙個完整的c + + 11實現理解static_assert。在寫作時,visual studio 2010就是在這種情況下:了解static_assert,但它留下__cplusplus設定199711l,因為它的c + +11的實施仍然是相當稀少的。

使用基於範圍的 for 迴圈迭代範圍

許多程式語言支援 for 迴圈的稱之為 for each 的變體,即針對集合中的元素重複一組語句。在 c 11 之前 c 沒有相應的核心語言支援。最接近的特性是來自標準庫中的被稱為 std for each 的通用演算法,它在範圍的所有元素上應用乙個函式。c 11 帶來了對 for each 的語言...

基於範圍的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...

基於範圍的for迴圈

在乙個範圍上執行for迴圈 用作對範圍中的各個值 如容器中的所有元素 進行操作的傳統for迴圈更加可讀的等價版本 屬性 可選 for 範圍宣告 範圍表示式 迴圈語句 上述語法產生的 等價於下列 range,begin和 end僅用域闡釋 對範圍表示式求值以確定要迭代的序列或範圍.依次對序列的每個元素...