View Full Version : C++ erase da vector
Dunque sto facendo un programmino(C++),in una porzione di codice devo prendere un elemento random da un vector,farci delle operazioni e cancellarlo.Ora probabilmente mi sono rincoglionito io ma non riesco ad eliminarlo in modo diretto,ovvero se genero un random n e vado poi ad accedere al vec[n] poi non so come eliminare direttamente vec[n].Il fatto è che erase() vuole come paramentro un iteratore,il che allunga la procedura di eliminazione....non esiste un modo diretto per eliminare vec[n]?
/\/\@®¢Ø
01-07-2002, 12:36
[caveat: vado a memoria]
Con gli iteratori puoi usare non solo gli operatori ++ ma anche la somma
e quindi per eliminare il 5o elemento ( ad esempio ) puoi scrivere
vector<Foo> v<
...
v.erase( v.begin() + 5 );
Se proprio gli iteratori non ti vanno a genio, e la posizione non e' importante puoi spostare l'elemento in fondo e toglierlo:
swap( v[5] , v[ v.size()-1 ] );
v.pop_back();
questa per altro e' probabilmente piu' efficiente visto che eviti di 'scalare' tutte gli elementi successivi a quello eliminato di una posizione
Ottimo quella dello swap mi sembra la soluzione migliore,non è che gli iteratori non mi vadano a genio,anzi sono ottimi strumenti,solo che in quel contesto un'accesso immediato mi veniva più comodo...a dire il vero avevo anche un po' di confusione,in effetti con gli iteratori era + semplice di quanto pensassi,il fatto è che quello che avevo in mente io si può fare con un vector ma non con un list....ed io ragionavo in termini di list...eheh
Grazie! :D
/\/\@®¢Ø
01-07-2002, 17:50
Forse ancora meglio...
in fondo l'elemento da eliminare non ti serve tenerlo con lo swap... meglio copiargli direttamente sopra l'ultimo elemento:
v[5] = v.back();
v.pop_back();
Ancora + efficente!
Thanks... ;)
/\/\@®¢Ø
01-07-2002, 20:06
Originariamente inviato da Nemok
[B]solo che in quel contesto un'accesso immediato mi veniva più comodo...
Comunque in linea di massima un l'accesso con iteratori ( v.begin() + 5 ) non è meno efficiente di v[5] visto che gli iteratori di un vector sono dei semplici puntatori all'array dove sono memorizzati i dati.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.