Skip to main content
Engineering LibreTexts

8.2: Range -Based Loops

  • Page ID
    29077
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Range-based for loop in C++

    The concept of a range-based for loop in C++ is added in 2011. It executes a for loop over a range of vallues. Used as a more readable equivalent to the traditional for loop operating over a range of values, such as all elements in an array.

    Syntax :

    for ( range_declaration : range_expression ) 
        loop_statement
    
    Parameters :
    range_declaration : 
    a declaration of a named variable, whose type is the 
    type of the element of the sequence represented by 
    range_expression, or a reference to that type.
    Often uses the auto specifier for automatic type 
    deduction.
    
    range_expression : 
    any expression that represents a suitable sequence 
    or a braced-init-list.
    
    loop_statement : 
    any statement, typically a compound statement, which
    is the body of the loop.

    This is a new concept to many programmers who have never programmed in a language that has a range based loop.

    Here is a simple piece of code to start with.

    // Illustration of range-for loop 
    // using CPP code 
    #include <iostream> 
    #include <vector> 
    using namespace std;
    
    //Driver 
    int main() 
    { 
        // Iterating over whole array 
        vector<int> myVec = {0, 1, 2, 3, 4, 5}; 
        for (auto countNum : myVec) 
            cout << countNum << ' ';     
         
        return 0;
    }

    Several things to pay attention to:

    • A new #include statements - <vector> 
    • We declare a vector - basically an array - that contains 6 elements
    • Our for statement is different:
      • we create a variable countNum - each time through the loop this variable is set to the next value in the array - this is similar to the way Python can do a for loop.
    • We do not have our typical update of our flag variable

    A long, more complex example is below

    // Illustration of range-for loop 
    // using CPP code 
    #include <iostream> 
    #include <vector> 
    #include <map> 
    
    //Driver 
    int main() 
    { 
        // This is what we just looked at above Iterating over whole array 
        vector<int> myVec = {0, 1, 2, 3, 4, 5}; 
        for (auto countNum : myVec) 
            cout << countNum << ' '; 
        
       cout << '\n'; 
        
        // the initializer may be a braced-init-list - so we specify the vector in the for statement
        for (int arrNum : {0, 1, 2, 3, 4, 5}) 
            cout << arrNum << ' '; 
        
        out << '\n'; 
    
        // Declare the array then iterate over the array 
        int intArr[] = {0, 1, 2, 3, 4, 5};     
        for (int arrNum : intArr) 
            cout << arrNum << ' '; 
        
        cout << '\n'; 
        
        // Just running a loop for every array element 
        for (int arrNum : intArr) 
            cout << "In loop" << ' '; 
        
        cout << '\n'; 
        
        // Printing string characters 
        string myStr = "CSP 31A"; 
        for (char c : myStr) 
            cout << c << ' '; 
            
        cout << '\n'; 
        
        return 0;
    } 
    

     

    Adapted from:
    "Range-based for loop in C++" by Rohit ThapliyalGeeks for Geeks is licensed under CC BY-SA 4.0

     


    This page titled 8.2: Range -Based Loops is shared under a CC BY-SA license and was authored, remixed, and/or curated by Patrick McClanahan.