天天看點

C++11 FAQ中文版:序列for循環語句

二 28 Year 2011 陳 良喬 C++11 FAQ

序列for循環語句

序列for循環語句允許重複周遊一組序列,而這組序列可以是任何可以重複周遊的序列,如由begin()和end()函數定義的STL序列。所有的标準容器都可用作這種序列,同時它也同樣可以是std::string,初始化清單(list),數組,以及任何由begin()和end()函數定義的序列,例如輸入流。這裡是一個序列for循環語句的例子:

void f(const vector& v)
    {
        for (auto x : v) cout << x << ‘n’;
        for (auto& x : v) ++x;    // 使用引用,友善我們修改容器中的資料
    }
           

可以這樣了解這裡的序列for循環語句,“對于v中的所有資料元素x”,循環由v.begin()開始,循環到v.end()結束。又如:

for (const auto x : { 1,2,3,5,8,13,21,34 })
      cout << x << ‘n’;
           

begin()函數(包括end()函數)可以是成員函數通過x.begin()方式調用,或者是獨立函數通過begin(x)方式調用。

(譯注:好像C#中早就有這種形式的for循環語句,用于周遊一個容器中的所有資料很友善,難道C++是從C#中借用過來的?)

或參見:

  • the C++ draft section 6.5.4 (note: changed not to use concepts)
  • [N2243==07-0103] Thorsten Ottosen:

    Wording for range-based for-loop (revision 2).

  • [N3257=11-0027 ] Jonathan Wakely and Bjarne Stroustrup: Range-based for statements and ADL (Option 5 was chosen).