Funktionsadapter !?!?!
-
Irgendwie verstehe ich folgende Zeile in dem Script unseres Professors nicht ??
Könntet ihr mir da mal helfen ...list<int>::iterator p1; p1 = find (menge.begin(), menge.end(), bind2nd(greater<int>(),3));Bei greater handelt es sich um eine vordefiniertes Funktonsobjekt ...
Wie die Funktion arbeitet ist auch klar ...allerdings verstehe ich den Sinn von bind2nd nicht , oder ich bin mir einfach nicht sicher ob es so stimmt wie ich es mir denke ...
Bedeutet es soviel wie dass die 3 kontinuierlich als zweiter Übergabe paramter an das Funtonsobjekt übergeben wird???
-
Ja. Als Resultat erhälst du dann eine
unary_function. Aber so alleine macht der Binder keinen Sinn.
-
list<int>::iterator p1; p1 = find( menge.begin(), menge.end(), bind2nd(greater<int>(),3) );Für jedes Element von menge zwischen ".begin()" und ".end()" wird die Funktion greater<int> aufgerufen. Dies kann man sich so vorstellen:
greater<int>( menge, 3 )Sollte die Funktion true zurückliefern wird das Element in die Auflistung p1 übernommen.
Vllt noch hier ne kurze hilfe zu bind2nd: http://www.cplusplus.com/reference/std/functional/bind2nd/
Mfg Marco
edit: Tags richtig gesetzt
-
Ad aCTa schrieb:
Aber so alleine macht der Binder keinen Sinn.
doch - nur der zeilenumbruch ist ein wenig fail
-
> doch - nur der zeilenumbruch ist ein wenig fail
*Auf Stirn klatsch* Man sollte den Code schon genauer lesen...

-
Nur so als Anmerkung:
std::bind1st()undstd::bind2nd()sind verbuggt, da sie nicht mit Referenzen umgehen können. Überhaupt sind die funktionalen Hilfsklassen- und Funktionen der C++-Standardbibliothek nicht besonders flexibel.Anders siehts aus, wenn man den TR1 (oder Boost) benutzen kann, was auf die meisten aktuellen StdLib-Implementierungen zutrifft. Mit
std::tr1::functionundstd::tr1::bindhat man sehr mächtige Werkzeuge zur Hand.