Itération simultanée sur plusieurs conteneurs
C 11 offre des méthodes d'itération polyvalentes pour les conteneurs, telles que les boucles basées sur une plage et std::for_each. Cependant, une tâche récurrente dans la manipulation des données consiste à parcourir simultanément deux ou plusieurs conteneurs de taille identique.
Boucles basées sur une plage à travers les indices
Pour ce scénario spécifique, itérer sur les indices des conteneurs à l'aide de boucles basées sur des plages fournit une solution efficace et expressive :
for (unsigned i : indices(containerA)) { containerA[i] = containerB[i]; }
La fonction indices renvoie une plage d'indices évaluée paresseusement pour le conteneur. Cette approche permet d'obtenir la même efficacité qu'une boucle for manuelle sans sacrifier la lisibilité du code.
Plage Zip
Pour les structures de données où ce modèle se produit fréquemment, en utilisant une "plage zip" " peut simplifier davantage le code :
for (auto& [a, b] : zip(containerA, containerB)) { a = b; }
La fonction zip crée une gamme de tuples, chacun contenant des éléments correspondants à partir des conteneurs d'entrée. Avant C 17, une syntaxe un peu plus verbeuse était nécessaire :
for (auto& &items : zip(containerA, containerB)) get<0>(items) = get<1>(items);
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!