consideri il seguente programma che inserisce un intervallo di elementi in un vettore:Esiste un modo standard per spostare un intervallo in un vettore?
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
v1.insert(v1.end(), v2.begin(), v2.end());
Questa efficientemente copia il raggio, prevedere spazi sufficienti nel vettore di destinazione per l'intero intervallo in modo che sarà richiesto un massimo di un ridimensionamento . Consideriamo ora il seguente programma che tenta di spostare una serie in un vettore:
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
for_each (v2.begin(), v2.end(), [&v1](string & s)
{
v1.emplace_back(std::move(s));
});
Questo esegue una mossa di successo, ma non godere dei benefici che inseriscono() ha per quanto riguarda preallocare spazio nel vettore di destinazione, in modo da il vettore potrebbe essere ridimensionato più volte durante l'operazione.
Quindi la mia domanda è: esiste un equivalente di inserimento che può spostare un intervallo in un vettore?
Se è necessario preallocare lo spazio nel vettore, utilizzare 'std :: vector :: reserve' e mantenere' push_back'/'emplace_back'. – rubenvb
@rubenvb Sì, ho pensato che probabilmente sarebbe stata la risposta, è solo un peccato che non ci sia un metodo pulito come 'insert()' è. – Benj
Questa sarebbe un'ottimizzazione opzionale, possibile solo quando l'intervallo è definito da iteratori ad accesso casuale. Non contarci. –