Sto cercando di risolvere alcuni codice che utilizza vettori un sacco e ci sono alcuni loop che assomigliano a questo:Come cancellare un vettore mantenendo la sua capacità?
for (int t=0;t<T;t++){
std::vector<double> vect;
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
}
so più o meno come migliorare questo riutilizzando lo stesso vettore per le iterazioni esterne, ma mentre lo facevo, ho scoperto che quando chiamavo std::vector::clear
"the vector capacity is not guaranteed to change", mentre speravo davvero che la capacità fosse garantita non cambiava. Forse sto solo fraintendendo ciò che è scritto su cplusplus.com. Tuttavia, la mia domanda è:
Come posso cancellare un vettore senza modificare la sua capacità?
Devo chiamare reserve
dopo clear
per verificare che la capacità sia la stessa?
PS: Giusto per essere chiari, voglio riscrivere sopra il codice a
std::vector<double> vect;
vect.reserve(MAX);
for (int t=0;t<T;t++){
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
vect.clear();
}
es. Voglio comunque riempirlo tramite push_back
e sono preoccupato per il clear()
che modifica la capacità del vettore.
C'è una discussione correlata qui. Il consenso sembra essere che il ridimensionamento di un vettore SMALLER non deve affliggere la capacità. http://stackoverflow.com/questions/1624803/does-resizing-a-vector-invalidate-iterators – Roddy
Una risposta migliore era http://stackoverflow.com/a/18467916 – Cubbi
@Cubbi dopo aver letto la discussione che segue quella risposta , Sono abbastanza convinto che 'clear' non è autorizzato a cambiare la capacità, quindi la mia domanda è un po 'obsoleta (e cplusplus sembra essere sbagliato in quel punto). La mia lezione è: mai fidarsi di nessuno tranne lo standard;) – user463035818