Considérons le programme suivant, qui insère un éventail d'éléments dans un vecteur:
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());
Cette efficacité des copies de la gamme, d'allouer suffisamment d'espace dans la cible de vecteur pour l'ensemble de la gamme ainsi qu'un maximum d'un redimensionnement sera nécessaire. Maintenant, considérons le programme suivant qui tente de déplacer une plage dans un vecteur:
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));
});
Ce rapport effectue un déménagement réussi, mais ne pas profiter des avantages que l'insert() à l'égard des preallocating de l'espace dans la cible vecteur, le vecteur peut être redimensionnée à plusieurs reprises au cours de l'opération.
Donc ma question est, est-il un insert équivalent qui peuvent se déplacer d'une plage dans un vecteur?