Maison >développement back-end >C++ >Comment parcourir efficacement plusieurs conteneurs C simultanément ?

Comment parcourir efficacement plusieurs conteneurs C simultanément ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 21:04:10949parcourir

How to Efficiently Iterate Over Multiple C   Containers Simultaneously?

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!

Déclaration:
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