Itérer simultanément sur plusieurs conteneurs en C
C 11 propose divers mécanismes pour itérer sur les conteneurs, y compris les boucles basées sur la plage et le 'std ::for_each' fonction. Cependant, la question se pose : quelle est l'approche recommandée pour itérer sur deux ou plusieurs conteneurs de taille égale afin d'effectuer une action similaire à la suivante :
for (unsigned i = 0; i < containerA.size(); ++i) { containerA[i] = containerB[i]; }
Utilisation d'indices avec une boucle basée sur une plage
Une solution efficace consiste à parcourir les index du conteneur à l'aide d'une boucle basée sur une plage. Cette approche offre le même niveau d’efficacité qu’une boucle for classique. L'extrait de code ci-dessous illustre cette méthode :
for (unsigned i : indices(containerA)) { containerA[i] = containerB[i]; }
La fonction 'indices' renvoie une plage d'indices évaluée paresseusement pour le conteneur. Son implémentation est disponible sur GitHub.
Zipping des conteneurs
Si ce modèle apparaît fréquemment dans vos données, une approche alternative consiste à compresser les conteneurs, créant ainsi une gamme de tuples. dont les éléments correspondent aux éléments appariés :
for (auto& [a, b] : zip(containerA, containerB)) { a = b; }
La fonction 'zip' peut être facilement implémentée en fonction des 'indices' fonction.
Cette approche permet également une itération efficace, et c'est une solution plus concise et lisible dans certains cas.
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!