Frage

Warum kann ich dies tun:

stable_sort(it1, it2, binary_function);

, aber nicht so aus:

priority_queue<type, vector<type>, binary_function> pq;

Warum kann ich eine Funktion im ersten Fall verwenden, sondern muß ein Objekt in den zweiten?

War es hilfreich?

Lösung

Wenn Sie die Referenz Besuche auf std::stable_sort , werden Sie sehen, dass die binary_function Ihnen zur Verfügung gestellten sollte ein Funktionsobjekt sein, wie gut ... Es gibt keinen Unterschied zwischen den beiden ist, mit der Ausnahme, dass vielleicht im zweiten Fall ist es keine richtige „cast“ oder Umwandlung von einer Funktion auf eine einwandfreie Funktion Objekt gemacht.

Ich glaube, dies auf die Tatsache zurückzuführen sein, dass *sort Funktionen die Funktors verwenden, um direkt und unmittelbar, so dass, wenn die Funktion Adresse gültig ist, wenn die *sort Funktion aufgerufen wird, wird es für die Dauer des Funktionsaufrufes gültig. Wenn Sie einen Behälter zu schaffen, das als Datenelement verwendet (im Wesentlichen), können Sie nicht sicher sein, die Funktionsreferenz während der gesamten Lebensdauer des Container-Objekts für ungültig erklärt werden wird. Ich weiß, es ist ein loser handwaving explication, aber es ist das Beste, was ich mit oben kommen kann. Vielleicht in C ++ die Bezugnahme auf eine binäre Funktion wird implizit auf den Bau eines std::function umgewandelt werden, so dass die Funktion „kopiert“ und es gibt keine Gültigkeit Problem.

Ich hoffe, ich habe nicht verloren Sie jetzt ...

Andere Tipps

priority_queue ist eine Vorlage und erwartet einen Typ als Argument, wo binary_function ist ein Funktionsobjekt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top