std::list / find();
-
ness schrieb:
struct mein_vergl_ftor { bool operator()(const mein_obj& obj,const std::string& kr) { return obj.getX()==kr; }; };
Den musst du als zus. Parameter übergeben. Bin mir aber nicht sicher, ob das Vergleichsobjekt ein templateparameter ist...
ok. EinVergleichsoperator. Wie setz ich den denn dann ein? Ich bin ein wenig ratlos.
-
kennste google?
-
Ich verstehe halt nur nicht, wie ich das in find(); einbaue. Google hilft mir irgendwie nicht. Ich such wohl nach dem falschen
-
find(begin(), end(), mein_vergl_ftor);
oder
find(begin(), end(), mein_vergl_ftor());
ich weiß nicht genau was richtig ist
-
looooooooool schrieb:
find(begin(), end(), mein_vergl_ftor);
oder
find(begin(), end(), mein_vergl_ftor());
ich weiß nicht genau was richtig ist
looool, ohne parameter?
-
entschuldigung
denke mal so:
struct mein_vergl_ftor { mein_vergl_ftor(const std::string& kr) : kr_(kr) { } bool operator()(const mein_obj& obj) { return obj.getX() == kr_; }; private: std::string kr_; }; find(begin(), end(), mein_vergl_ftor("TGGC"));
-
struct mein_vergl_ftor { mein_vergl_ftor( const std::string& kr ) : kr_(kr) { } bool operator()(const mein_obj& obj) const { return obj.getX()==kr_; } std::string kr_; }; // ... find(begin(), end(), mein_vergl_ftor("Kriterium"));
-
Ja. Du übergibst find eine Funktion, dem find 2 Objekte übergibt, und diese funktion sagt dann, ob diese gleich sind. Nun sollte man das Prinzip des Funktors verstehen:
Man schreibe eine Klasse, die einen überladenen operator() hat, erzeuge eine Instanz davon, und schreibe instanz(parameter). Keiner weiß, ob das ein Funktor, eine Funktion oder sonst was ist. In diesem fall erwartet der Konstruktor keine Parameter, als klasse(). Das schöne ist, dass der Funktor komplett verschwindet:
der aufruf ist inline, der compiler stellt fest, dass das Objekt nicht benutz wird, und sollte es wgoptimieren (so stell ich mir das wenigstens vor...). Das ist der Vorteil gegenüber Funktionszeigern (in diesem Fall): man kann Funktoren inlinen...
/edit: das von finix könnte auch richtig sein, hab jetzt nicht nachgeschlagen...
-
konstuktor braucht man
-
Ich danke für die Antworten. Was ich aber nicht verstehe: Wo kommt das Temporäre in find(begin(), end(), mein_vergl_ftor("...")); her?
-
aus der STL
-
Also ich meine das Temporäre Objekt, mit dem ich vergleiche
-
Die Frage ist unverständlich. Du erstellst das temporäre Objekt doch mit mein_vergl_ftor("...").
-
und find erstellt ein temporäres objekt um es an operator () zu übergeben
mein_vergl_ftor("...")("___")
-
hä? schrieb:
und find erstellt ein temporäres objekt um es an operator () zu übergeben
mein_vergl_ftor("...")("___")
danke, jetzt hab ichs verstanden.
-
find ist hier std:
:find oder std::find aus <algorithm>?
-
algorithm
-
sicher, dass das funktioniert?
error C2679: binary '==' : no operator found which takes a right-hand operand of type 'const CompareGWHost' (or there is no acceptable conversion)
-
ein denkender mensch würde den op== überladen
-
otze schrieb:
ein denkender mensch würde den op== überladen
nur wenn er weiß, was er tut