Last Updated : 12 Jul, 2021
Apart from the generic looping techniques, such as "for, while and do-while", C++ in its language also allows us to use another functionality which solves the same purpose termed "for-each" loops. This loop accepts a function which executes over each of the container elements. This loop is defined in the header file "algorithm": #include<algorithm>, and hence has to be included for successful operation of this loop.
Syntax:
for_each (InputIterator start_iter, InputIterator last_iter, Function fnc) start_iter : The beginning position from where function operations has to be executed. last_iter : The ending position till where function has to be executed. fnc/obj_fnc : The 3rd argument is a function or an object function which operation would be applied to each element.CPP
// C++ code to demonstrate the
// working of for_each loop
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
// helper function 1
void printx2(int a)
{
cout << a * 2 << " ";
}
// helper function 2
// object type function
struct Class2
{
void operator() (int a)
{
cout << a * 3 << " ";
}
} ob1;
int main()
{
// initializing array
int arr[5] = { 1, 5, 2, 4, 3 };
cout << "Using Arrays:" << endl;
// printing array using for_each
// using function
cout << "Multiple of 2 of elements are : ";
for_each(arr, arr + 5, printx2);
cout << endl;
// printing array using for_each
// using object function
cout << "Multiple of 3 of elements are : ";
for_each(arr, arr + 5, ob1);
cout << endl;
// initializing vector
vector<int> arr1 = { 4, 5, 8, 3, 1 };
cout << "Using Vectors:" << endl;
// printing array using for_each
// using function
cout << "Multiple of 2 of elements are : ";
for_each(arr1.begin(), arr1.end(), printx2);
cout << endl;
// printing array using for_each
// using object function
cout << "Multiple of 3 of elements are : ";
for_each(arr1.begin(), arr1.end(), ob1);
cout << endl;
}
Using Arrays: Multiple of 2 of elements are : 2 10 4 8 6 Multiple of 3 of elements are : 3 15 6 12 9 Using Vectors: Multiple of 2 of elements are : 8 10 16 6 2 Multiple of 3 of elements are : 12 15 24 9 3
Exceptions and for_each:
In the cases of exceptions, if the function throws an exception or if any of the operations on iterators throws an exception, for_each loop will also throw an exception and break/terminate the loop.
Note:
// C++ code to demonstrate the working
// of for_each with Exception
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
// Helper function 1
void printx2(int a)
{
cout << a * 2 << " ";
if ( a % 2 == 0)
{
throw a;
}
}
// Helper function 2
// object type function
struct Class2
{
void operator() (int a)
{
cout << a * 3 << " ";
if ( a % 2 == 0)
{
throw a;
}
}
} ob1;
int main()
{
// Initializing array
int arr[5] = { 1, 5, 2, 4, 3 };
cout << "Using Array" << endl;
// Printing Exception using for_each
// using function
try
{
for_each(arr, arr + 5, printx2);
}
catch(int i)
{
cout << "\nThe Exception element is : " << i ;
}
cout << endl;
// Printing Exception using for_each
// using object function
try
{
for_each(arr, arr + 5, ob1);
}
catch(int i)
{
cout << "\nThe Exception element is : " << i ;
}
// Initializing vector
vector<int> arr1 = { 1, 3, 6, 5, 1 };
cout << "\nUsing Vector" << endl;
// Printing Exception using for_each
// using function
try
{
for_each(arr1.begin(), arr1.end(), printx2);
}
catch(int i)
{
cout << "\nThe Exception element is : " << i ;
}
cout << endl;
// printing Exception using for_each
// using object function
try
{
for_each(arr1.begin(), arr1.end(), ob1);
}
catch(int i)
{
cout << "\nThe Exception element is : " << i ;
}
}
Using Array 2 10 4 The Exception element is : 2 3 15 6 The Exception element is : 2 Using Vector 2 6 12 The Exception element is : 6 3 9 18 The Exception element is : 6
Using Lambdas:
With the introduction of lambda functions, this can be easily used to make the whole thing inline which is very compact and useful for people looking for using functional programming.
C++
#include <bits/stdc++.h>
#include <iostream>
using namespace std;
int main()
{
vector<int> vec{ 1, 2, 3, 4, 5 };
// this increases all the values in the vector by 1;
for_each(vec.begin(), vec.end(), [](int& a) { a++; });
// this prints all the values in the vector;
for_each(vec.begin(), vec.end(),
[](int a) { cout << a << " " << endl; });
return 0;
}
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4