Ho una classe che genera un numero arbitrario di oggetto worker che calcola i risultati in un std::vector
. Ho intenzione di rimuovere alcuni degli oggetti di lavoro in determinati punti, ma mi piacerebbe mantenere i loro risultati in un certo ordinamento noto solo alla classe che è spawned
loro. Così sto fornendo i vettori per l'output nella classe A.Iterator vs. Reference vs. pointer
Ho tre opzioni (IMO): potrei avere i puntatori ai vettori, riferimenti o iteratori come membri. Mentre l'opzione iteratore ha alcuni richiami (l'iteratore potrebbe essere incrementato). Non sono sicuro se puntatori o riferimenti siano più chiari. Ritengo che i riferimenti siano migliori perché non possono essere NULL e un cruncher richiederebbe la presenza di un vettore.
Quello che non sono sicuro è la validità dei riferimenti. Saranno invalidati da alcune operazioni su std::list< std::vector<int> >
? Queste operazioni equivalgono a invalidare gli iteratori di std::list
? C'è un altro approccio che non vedo in questo momento? Anche l'accoppiamento con un contenitore non sembra corretto: costringo un contenitore specifico alla classe Cruncher.
Codice prevista chiarezza:
#include <list>
#include <vector>
#include <boost/ptr_container/ptr_list.hpp>
class Cruncher {
std::vector<int>* numPointer;
std::vector<int>& numRef;
std::list< std::vector<int> >::iterator numIterator;
public:
Cruncher(std::vector<int>*);
Cruncher(std::vector<int>&);
Cruncher(std::list< std::vector<int> >::iterator);
};
class A {
std::list< std::vector<int> > container;
boost::ptr_list< std::vector<int> > container2;
std::vector<Cruncher> cruncherList;
};
Stavo per usare std :: list per memorizzare i referenti come indicato nel campione. Se cambi la tua citazione dello standard nella sezione che spiega l'invalidazione per gli elenchi, la tua risposta va bene. – pmr
@ pmr - aggiornato la mia risposta per includere ulteriori informazioni sugli elenchi. –