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}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)

    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.