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