Sezione dedicata agli algoritmi che non modificano le sequenze su cui operano.
L'algoritmo for_each() opera non modifica direttamente la sequenza su cui opera, ma la funzione, o il functor (function object), che accetta come parametro può farlo.
A seguire un esempio che illustra l'uso di for_each sia con una funzione che con un functor.
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
static void display(int x) {
cout << x << ' ';
}
class Increment { // functor class
private:
int increment;
public:
Increment(int i = 1) : increment(i) {
}
void operator()(int& x) { // mutating operator
x += increment;
}
};
int main() {
vector<int> v(5); // vector of 5 zeros
for_each(v.begin(), v.end(), display); // 0 0 0 0 0
cout << endl;
// v is changed by the functor, not by for_each:
for_each(v.begin(), v.end(), Increment(2));
for_each(v.begin(), v.end(), display); // 2 2 2 2 2
cout << endl;
}
Nessun commento:
Posta un commento