Wie ich verstehe die quicksort, wenn das Schlurfen der Mitglieder mit der Kopie Ctor geschehen ist, wirst du ziemlich durch das, was O (n ln n enttäuscht sein) bedeutet wirklich. So entschied ich mich qSort
mitQt: qSort ohne die Kopie Konstruktor
QList<QObject> mylist; //Yes, I know this isn't feasible, I just wanted to find where the copy ctor is being used
qSort(list);
zu testen und wurde getroffen mit denen
'QObject :: QObject (const QObject &)' ist privat
Fehler. Von dem, was ich sagen kann, beginnt das Problem mit der begin()
Methode, denn wenn ich
list.begin();
der Compiler Fehler zeigt habe, dass diese qlist.h Linie irgendwie die Kopie Ctor versucht, zu verwenden:
inline void detach() { if (d->ref != 1) detach_helper(); }
Ich weiß, ich könnte die Mitglieder der Liste Zeiger machen, dann implementieren Sie die lessThan
Funktion, aber das ist nicht sehr bequem für diese Code-Basis. Also, wie kann ich vermeiden, die Kopie ctor, wenn qSort
arbeitet auf einer Liste von Objekten?
Ich verwende Qt 4.8 unter Linux 64-Bit und 32-Bit.
Ich verwende nicht qt, aber Sie könnten eine Reihe von Indizes von 0 bis zur maximalen Anzahl der Elemente einrichten - 1. Dann sortieren Sie die Indizes anstelle Ihrer Liste und verwenden Sie diese, um die Daten zu referenzieren. – PaulMcKenzie
@PaulMcKenzie Ist das besser als mit Zeigern? – Opux
Ja, es ist "besser" als Zeiger, da es keine Zeiger benötigt. Ich könnte eine Antwort posten, aber es wird darauf ausgerichtet sein, 'std :: sort' und' vector' zu verwenden, nicht Qt (aber das gleiche Prinzip würde gelten, würde ich glauben). – PaulMcKenzie