Sto entrando in C++ da Java e ho una situazione di progettazione comune in cui ho un elemento (non primitivo) che vorrei rimuovere da un vettore std ::.IndexOf stile ArrayList per std :: vector in C++?
in Java, scriverei qualcosa tipo: arrayList.remove (arrayList.indexOf (myClassInstance));
in C++, con std :: vector, qual è il modo migliore/più performante/più pulito di farlo?
la cosa migliore che posso pensare è creare un riferimento all'istanza che sto cercando, quindi scorrere il vettore fino a trovare quel riferimento. in sostanza, per confrontare l'indirizzo di memoria di ogni elemento nel vettore con il riferimento fino a quando non ottengo una corrispondenza.
Sono sulla buona strada? o c'è un modo migliore per farlo? (forse usando un diverso contenitore std, ho usato solo std :: vector finora.)
Supponendo di avere un insieme di puntatori o shared_ptr, std :: set può funzionare bene per voi , basta confrontare gli indirizzi del puntatore. Se conosci l'indirizzo dell'articolo che stai cercando, solo mySet.cancellare (PTR); – CashCow
@CashCow: c'è molta differenza di prestazioni nell'iterazione di tutti i membri di un file std :: set vs std: vector? altrove nel mio codice, sto chiamando un metodo su ogni elemento dell'insieme, ogni ciclo. – ericsoco