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