Quando si chiama la funzione membro insert
su un std::vector
, sarà reserve
prima di "respingere" i nuovi elementi? Voglio dire, lo standard lo garantisce o no?std :: vector :: inserire riserva per definizione?
In altre parole, devo fare in questo modo:
std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.insert(a.end(),b.begin(),b.end());
o come questo:
std::vector<int> a{1,2,3,4,5};
std::vector<int> b{6,7,8,9,10};
a.reserve(a.size()+b.size());
a.insert(a.end(),b.begin(),b.end());
o un altro approccio migliore?
Questo può rispondere alla tua domanda: http://stackoverflow.com/questions/2208293/questo-è-il-molto-efficiente-strada-per-append-one-stdvector-to-the-end-of -un altro –
Dipende se gli iteratori sono iteratori di input o strettamente più forti. Per qualsiasi cosa più forte è possibile ottenere il conteggio con 'distanza'. È QoI, ma qualsiasi implementazione decente non dovrebbe ridistribuire più di una volta per questo. –
Entrambe le implementazioni 'libstdC++' e' libC++' riservano spazio per l'intera sequenza in una volta se sono fornite almeno iteratori in avanti. –