STL - find e find_if

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.

Ci sono due versioni dell'algoritmo di ricerca, a seconda se si voglia specificare o meno un predicato da applicare alla ricerca.

La find() cerca il primo elemento nella sequenza che sia uguale al parametro passato, la find_if() cerca il primo che soddisfi il predicato passato come parametro.

Ecco l'esempio che mostra l'uso di find_if():

#include<algorithm>
#include<vector>
#include<iostream>

using namespace std;

void display(int x) {
cout << x << ' ';
}

class odd {
public:

bool operator()(int x) { // odd argument yields true
return x % 2;
}
};

int main() {
vector<int> v(8);
for (size_t i = 0; i < v.size(); ++i)
v[i] = 2 * i; // all even
v[5] += 1; // an odd number

// display
for_each(v.begin(), v.end(), display);
cout << endl;

// search for odd number
vector<int>::iterator it = find_if(v.begin(), v.end(), odd());
if (it != v.end()) {
cout << "The first odd number (" << *it << ") was found at position "
<< (it - v.begin()) << "." << endl;
}
else
cout << "No odd number found." << endl;
}

Nessun commento:

Posta un commento