STL - for_each

Dal quinto capitolo di Designing Components with the C++ STL, di Ulrich Breymann. Algoritmi standard.

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