# 8.2: Range -Based Loops

$$\newcommand{\vecs}{\overset { \rightharpoonup} {\mathbf{#1}} }$$ $$\newcommand{\vecd}{\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 \|}$$ $$\newcommand{\inner}{\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 \|}$$ $$\newcommand{\inner}{\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.

// 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;
}