Ich habe eine Funktion:Keeping Vektor von Iteratoren der Daten
void get_good_items(const std::vector<T>& data,std::vector<XXX>& good_items);
Diese Funktion sollte alle Daten überprüfen und Gegenstände finden, die eine Bedingung erfüllt, und zurück, wo sie in good_items sind.
Was ist das beste anstelle von std::vector<XXX>
?
std::vector<size_t>
, die alle guten Indizes enthält.std::vector<T*>
, die einen Zeiger auf die Elemente enthalten.std::vector<std::vector<T>::iterator>
enthält Iteratoren zu den Elementen.- andere ??
EDIT:
Was werde ich mit dem good_items
tun? Viele Dinge ... einer von ihnen ist, sie aus dem Vektor zu löschen und sie an anderer Stelle zu speichern. vielleicht etwas anderes später
EDIT 2:
Einer der wichtigsten ist für mich, wie die Einzelteile in data
Zugriff wird schnell sein, abhängig von der Struktur des good_items
?
EDIT 3:
Ich habe gerade relized, dass mein Gedanke falsch war. Ist nicht besser, rohe Zeiger (oder Smart) als Elemente des Vektors zu behalten, damit ich die reellen Werte des Vektors behalten kann (welche Zeiger sind), und ich habe keine Angst vor schwerer Kopie, weil sie nur Zeiger sind?
Wollen Sie das Ergebnis nur in der anrufenden Funktion zu verwenden, oder Sie tun Versuchen Sie es zu speichern, damit Sie es erneut verwenden können (nachdem sich der Vektor möglicherweise bereits geändert hat)? Wird irgendein anderer Code (möglicherweise in einem anderen Thread) den Vektor zwischen "get_good_items" und Ihrem Ergebnis ändern? – CompuChip
Für jetzt sorgen wir uns nicht um Thread-safty –
Wenn der Datenvektor geändert wird (Elemente davon löschend, verschiebt es von einem Speicherbereich in einen anderen usw.), werden die Referenzen brechen. In diesem Fall können Sie die guten Daten aus den Daten in good_items kopieren. Wenn mit dem Datenvektor nicht umgegangen wird, können Sie leicht Zeiger speichern (daher wäre 2 der Weg zu gehen, da omho einfacher zu handhaben ist und besser lesbar ist) für die Elemente. – rbaleksandar