Range-based for loop (C++11 feature)

From Cppreference

Jump to: navigation, search

Executes a for loop over a range.

Used as a more readable equivalent to the traditional for loop operating over a range of values, for example, from some container or list.

Contents

[edit] Syntax

for ( range_declaration : range_expression) loop_statement

[edit] Explanation

The above syntax produces code similar to the following (__range, __begin and __end are for exposition only):

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

}

The range_expression is evaluated to determine the sequence or range will be iterated over. Each element of the sequence is dereferenced, and assigned to the variable using the type and name given in the range_declaration.

The begin_expr and end_expr are defined to be either:

Just as with a traditional loop, break statement can be to exit the loop early and continue statement can be used as shortcut to restart the loop with the next element.

[edit] Keywords

for

[edit] Example

#include <iostream>
#include <vector>
 
int main() 
{
    std::vector<int> v = {0,1,2,3,4,5};
 
    for (int &i : v) { // access by reference (const allowed)
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    for (auto i : v) { // compiler can 'magically' determine the right type
        std::cout << i << " ";
    }
    std::cout << '\n';
 
    for (int i : v) {   // access by value as well
        std::cout << i << " ";
    }
    std::cout << '\n';
}

Output:

0 1 2 3 4 5
0 1 2 3 4 5
0 1 2 3 4 5