2017-06-28 10 views
2

私はコンテナを返す関数を持っています。 「Container」と呼んでみましょう。各ループごとにステートメントが実行されますか?

Container GenerateRandomContainer() { ... } 

この関数は、呼び出しごとにランダムな要素を持つコンテナを生成します。

私はこのような各ループのために使用して、このコンテナを反復処理:

for(Element e : GenerateRandomContainer()) { ... } 

それはイテレーションごとに新しいContainerを生成しますかループごとに入力されたとき、それは一つだけを生成しますか?次のように

+1

'GenerateRandomContainer()'は一度だけ呼び出されます。 http://en.cppreference.com/w/cpp/language/range-forも参照してください。これは、range-for構文がどのように実行されるかを正確に説明しています。 –

+0

私はそれを見ています。 – Shiro

+0

これは、各要素を 'e'にコピーすることに注意してください。コンテナ内の各要素を参照するために 'Element&e'(または' auto&e')を使用してください。 –

答えて

4

range-based for loopは同等です:

{ 
    auto && __range = range_expression ; 
    auto __begin = begin_expr ; 
    auto __end = end_expr ; 
    for (; __begin != __end; ++__begin) { 
     range_declaration = *__begin; 
     loop_statement 
    } 
} 

注意auto && __range = range_expression ;range_expressionはあなたのコードのためにGenerateRandomContainer()になります)第一の文。これは、Containerが1回だけ生成され、そのすべての要素を反復することを意味します。

0

これはコンテナを1回だけ生成し、ループは生成された要素を反復処理します。

関連する問題