Maison > développement back-end > C++ > Comment dupliquer et ajouter efficacement du contenu vectoriel sans utiliser de boucles ?

Comment dupliquer et ajouter efficacement du contenu vectoriel sans utiliser de boucles ?

Patricia Arquette
Libérer: 2024-11-28 00:52:12
original
660 Les gens l'ont consulté

How Can You Efficiently Duplicate and Append Vector Contents Without Using Loops?

Duplication et ajout efficaces de contenus vectoriels

Lorsque vous travaillez avec des vecteurs, il est souvent nécessaire de dupliquer des éléments et de les ajouter à la fin du vecteur original. Cela peut être délicat sans utiliser de boucle.

Défis liés aux solutions itératives

Les méthodes telles que std::vector::insert() ne conviennent pas à cette tâche car les itérateurs doivent le vecteur peut devenir invalide lors de l'insertion.

Une approche plus propre utilisant le redimensionnement et Copy_n

Une solution plus élégante implique deux étapes :

  1. Redimensionner le vecteur : Utilisez resize() ou reserve() pour allouer de la mémoire au éléments en double.
  2. Copier les éléments : Utilisez std::copy_n() pour copier les éléments d'origine dans leurs emplacements en double.

Voici deux exemples d'implémentation :

// Using resize() and copy_n()
auto old_count = xx.size();
xx.resize(2 * old_count);
std::copy_n(xx.begin(), old_count, xx.begin() + old_count);

// Using reserve() and copy_n() via 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

Dans les deux cas, la taille du vecteur d'origine est doublée pour s'adapter aux doublons, et une opération copy_n() est utilisé pour transférer les éléments. Il est important de se souvenir de la taille d'origine du vecteur avant de redimensionner et d'utiliser reserve() avec copy_n(), car l'itérateur end() pointe au-delà de la fin du vecteur après la 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!

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