Maison >développement back-end >C++ >Comment choisir la bonne syntaxe de boucle « for » basée sur une plage C 11 ?

Comment choisir la bonne syntaxe de boucle « for » basée sur une plage C 11 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-16 05:55:09562parcourir

How to Choose the Right C  11 Range-Based `for` Loop Syntax?

Comprendre la syntaxe for basée sur une plage en C 11

Les boucles for basées sur une plage en C 11 fournissent une syntaxe simplifiée pour itérer sur les conteneurs. La syntaxe varie selon que vous comptez observer ou modifier les éléments du conteneur.

Pour observer les éléments

Pour observer les éléments sans les modifier, la syntaxe recommandée est :

for (const auto& elem : container)

Cette syntaxe capture les éléments par référence const, évitant ainsi les copies inutiles dans les cas où les objets coûtent cher à copier.

Pour modifier des éléments

Si vous devez modifier des éléments en place, la syntaxe est :

for (auto& elem : container)

Cette syntaxe capture les éléments par référence non const, permettant de les modifier dans le corps de la boucle.

Cas particulier : Proxy Itérateurs

Cependant, pour les conteneurs qui utilisent des itérateurs proxy (tels que std::vector), une syntaxe différente est requise pour modifier les éléments :

for (auto&& elem : container)

Cette syntaxe utilise le modificateur de type "&&" pour fonctionner correctement avec le proxy itérateurs.

Résumé

  • Pour observer des éléments, utilisez for (const auto& elem : conteneur) ou for (auto elem : conteneur) si la copie est peu coûteuse.
  • Pour modifier des éléments, utiliser for (auto& elem : conteneur) ou for (auto&& elem : conteneur) pour proxy itérateurs.
  • Dans le code générique, préférez utiliser la syntaxe de référence const pour l'observation et auto&& pour la modification afin de gérer les itérateurs standard et proxy avec élégance.

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