Maison >développement back-end >C++ >Comment dupliquer et ajouter efficacement un vecteur à lui-même ?
Avez-vous rencontré le besoin de dupliquer et d'ajouter le contenu d'un vecteur à lui-même ? Si tel est le cas, vous recherchez peut-être une solution élégante sans recourir à des boucles explicites.
Bien que std::vector::insert puisse sembler être un candidat approprié, la version itérative présente un comportement non défini si elle est utilisée avec *this comme itérateur. De plus, std::copy seul peut entraîner des erreurs de segmentation.
N'ayez crainte ! Il existe une approche simple et efficace qui comporte deux étapes :
Voici un exemple d'utilisation du redimensionnement :
auto old_count = xx.size(); xx.resize(2 * old_count); std::copy_n(xx.begin(), old_count, xx.begin() + old_count);
Vous pouvez également utiliser la réserve avec std::back_inserter:
auto old_count = xx.size(); xx.reserve(2 * old_count); std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
Notez que lors de l'utilisation de la réserve, std::copy_n est essentiel puisque end() pointe vers la fin du vecteur, ce qui le rend invalide en tant que point d'insertion.
Les solutions ci-dessus garantissent que le vecteur résultant contient les éléments d'origine dupliqués et ajoutés à eux-mêmes, préservant l'intégrité des éléments existants et minimisant les opérations de réallocation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!