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 :
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));
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!