Wie wirkt denn dieser ganze Kram zusammen?

Was haben wir eigentlich?

Wir haben

Rufen wir also find_if() vollständig auf:

find_if(V1.begin(),V1.end(),imBereich<int>(6,12));

Was geschieht hier eigentlich?

Zuerst wird ein Funktionsobjekt nach der Klasse imBereich<int> angelegt, wobei dessen Konstruktor mit den Werten 6 (für unten) und 12 (für oben) aufgerufen wird.
Dann wird die Startadresse des Aufrufoperators () des gerade angelegten Objektes an find_if() als dritter Parameter übergeben.
Nun klappt alles latürnich zusammen.
(Wer jetzt noch prozessiert, kriegts von mir nochmal um die Ohren gehauen!)
... aber ganz friedlich im Unterricht.

Und zum Schluss noch 'mal alles zusammen:


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

template <typename T>
class imBereich
 : public unary_function<T,bool>
{
 public:
  imBereich(T u, T o):unten(u),oben(o)
  {}
  bool operator()(const T& value) const
  {return unten<=value && value<=oben;}
 private:
  T unten, oben;
};

int main(int argc, char* argv[])
{
 vector<int> V1;
 V1.push_back(5);
 V1.push_back(9);
 V1.push_back(2);
 vector<int>::iterator iter;
 iter = find_if(V1.begin(),V1.end(),
  imBereich<int>(6,12));
 if (iter!=V1.end()) cout << *iter << endl;
 else cout << "Nichts gefunden!" << endl;
 return 0;
}
Es wird tatsächlich die 9 ausgegeben. Wer hätte das gedacht? ||;-)