Maison > développement back-end > C++ > le corps du texte

Comment ajouter efficacement un vecteur à lui-même sans boucle ?

Barbara Streisand
Libérer: 2024-11-09 01:23:02
original
525 Les gens l'ont consulté

How to Efficiently Append a Vector to Itself Without a Loop?

Solution élégante pour ajouter un vecteur à lui-même

Dupliquer le contenu d'un vecteur et l'ajouter au vecteur d'origine est une opération courante. Cependant, mettre en œuvre cela efficacement sans boucle peut être difficile.

Discussion du défi

La question met en évidence les limites de std::vector::insert et std::copy pour cette tâche spécifique. std::vector::insert interdit l'utilisation d'un itérateur pour faire référence au vecteur actuel, et std::copy déclenche une erreur de segmentation lorsqu'il est utilisé dans ce contexte.

Solution optimale

La solution optimale consiste à combiner std::vector::resize (ou std::vector::reserve) avec std::copy_n. Le code suivant illustre cette approche :

auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);
Copier après la connexion

Vous pouvez également utiliser std::vector::reserve et std::back_inserter:

auto old_count = xx.size();
xx.reserve(2 * old_count);
std::copy_n(xx.begin(), old_count, std::back_inserter(xx));
Copier après la connexion

Explication

std::vector::resize réaffecte le vecteur si sa nouvelle taille dépasse son ancienne capacité. std::copy_n copie le nombre spécifié d'éléments depuis le début du vecteur vers un nouvel emplacement.

Lors de l'utilisation de std::vector::reserve, std::copy_n est nécessaire car l'itérateur end() pointe un élément après la fin du vecteur. Cela le rend invalide pour les insertions.

Conclusion

Cette solution offre un moyen concis et efficace d'ajouter le contenu d'un vecteur à lui-même sans recourir à une méthode basée sur une boucle. mise en œuvre. En utilisant les opérations resize et copy_n, vous pouvez obtenir la fonctionnalité souhaitée avec une surcharge de code minimale.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal