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

Comment initialiser efficacement un « std :: vector » à partir d'un tableau de style C ?

Susan Sarandon
Libérer: 2024-11-12 13:37:02
original
206 Les gens l'ont consulté

How to Initialize a `std::vector` from a C-style Array Efficiently?

Initialisation efficace de std::vector à partir d'un tableau de style C

Lorsque vous travaillez avec du code existant ou des dépendances externes, vous pouvez rencontrer des scénarios où les données sont fournies sous forme de tableaux de style C. L'intégration de ces données dans des structures C modernes comme std::vector nécessite une attention particulière pour l'efficacité.

Dans l'extrait de code fourni, la classe Foo possède un std::vector nommé w_. Pour remplir ce vecteur avec des données fournies sous forme de tableau de style C (w avec une longueur len), vous avez besoin d'une méthode rentable.

Évitez le redimensionnement et la copie excessifs

Bien que vous puissiez redimensionner w_ en len et le remplir manuellement, cette approche implique un redimensionnement inutile et une copie élément par élément. De même, l'utilisation de std::copy() introduit une opération de copie supplémentaire.

Exploiter l'arithmétique du pointeur

Une solution plus efficace consiste à utiliser l'arithmétique du pointeur. Puisque les pointeurs peuvent être traités comme des itérateurs, vous pouvez initialiser w_ directement en utilisant la plage [w, w len):

w_.assign(w, w + len);
Copier après la connexion

Cette syntaxe initialise w_ en attribuant une plage d'éléments du tableau de style C w à sa fin. La classe std::vector se charge d'allouer la mémoire nécessaire et de copier les éléments efficacement.

En employant cette méthode, vous évitez la surcharge liée au redimensionnement explicite et aux opérations de copie séparées, ce qui aboutit à une approche plus efficace et concise. .

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