2017-06-28 4 views
2

Ich habe eine Funktion, die einen Container zurückgibt. Nennen wir es einfach 'Container'.Wird die Anweisung für jede Schleife bei jeder Iteration ausgeführt?

Container GenerateRandomContainer() { ... } 

Diese Funktion generiert einen Container mit zufälligen Elementen, die bei jedem Aufruf unterschiedlich sind.

Wenn ich durch diesen Behälter durchlaufen ein, wie dies für jede Schleife mit:

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

Wird es eine neue Container jeder Iteration erzeugen, oder wird sie erzeugen nur ein, wenn die für jede Schleife eingegeben wird?

+1

'GenerateRandomContainer()' wird nur einmal aufgerufen. Siehe auch http://en.cppreference.com/w/cpp/language/range-for, es erklärt genau, wie Range-for-Konstrukt ausgeführt wird. –

+0

Ich werde es mir ansehen. – Shiro

+0

Beachten Sie, dass dies jedes Element in "e" kopiert; Verwenden Sie 'Element & e' (oder' auto & e'), um auf jedes Element im Container zu verweisen –

Antwort

4

Die range-based for loop entspricht wie folgt:

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

Beachten Sie die erste Anweisung auto && __range = range_expression ; (range_expression wird GenerateRandomContainer() für Ihren Code sein); das bedeutet, dass die Container nur einmal generiert wird und alle Elemente davon iteriert.

0

Es wird ein Behälter nur einmal erzeugen, und dann wird die Schleife durchlaufen die erzeugten Elemente.

Verwandte Themen