Ho una funzione:Keeping vettore di iteratori dei dati
void get_good_items(const std::vector<T>& data,std::vector<XXX>& good_items);
Questa funzione dovrebbe controllare tutti i dati e trovare gli oggetti che soddisfa una condizione e tornare dove sono in good_items.
cosa è meglio invece di std::vector<XXX>
?
std::vector<size_t>
che contiene tutti gli indici validi.std::vector<T*>
che contengono un puntatore agli articoli.std::vector<std::vector<T>::iterator>
che contiene iteratori per gli articoli.- altro ??
EDIT:
Cosa farò con il good_items
? Molte cose ... una di queste è cancellarle dal vettore e salvarle in altro luogo. forse qualcos'altro dopo
EDIT 2:
Uno dei più importante per me è come sarà l'accesso alle voci in data
sarà veloce a seconda della struct di good_items
?
EDIT 3:
Ho appena relized che il mio pensiero era sbagliato. Non è meglio mantenere puntatori grezzi (o intelligenti) come elementi del vettore in modo da poter mantenere i valori reali del vettore (che sono i puntatori) e non ho paura della copia pesante perché sono solo indicatori?
Userete il risultato solo nella funzione di chiamata, o voi tentare di memorizzarlo in modo da poterlo riutilizzare (dopo che il vettore potrebbe essere già stato modificato)? Qualsiasi altro codice (eventualmente in un thread diverso) modificherà il vettore tra "get_good_items" e il tuo utilizzo del risultato? – CompuChip
Per ora non preoccupiamoci del thread-safty –
Se il vettore dati viene modificato (cancellando elementi da esso, spostandolo da un intervallo di memoria ad un altro ecc.) I riferimenti si interromperanno. In questo caso è possibile copiare gli elementi validi dai dati a good_items. Se il vettore di dati non sarà armeggiato, puoi facilmente memorizzare i puntatori (quindi 2 sarebbe la strada da percorrere poiché omho è più facile da gestire ed è più leggibile) agli elementi. – rbaleksandar