Rendre les types personnalisés compatibles avec les boucles for basées sur une plage
Pour activer l'utilisation de boucles for basées sur une plage avec des types de données personnalisés, vous avoir deux options principales :
Considérations sur l'espace de noms :
Si votre type personnalisé réside dans un espace de noms, tel que XML, vous devez déclarer le début() et la fin() fonctionne également dans cet espace de noms. Il n'est pas nécessaire de spécifier xml::begin() ou std::begin().
Exigences de la méthode :
Les valeurs de retour de début/fin ne sont pas doivent être de véritables itérateurs. Cependant, ils doivent respecter des exigences spécifiques :
Extension de boucle for basée sur une plage :
La syntaxe de boucle for basée sur une plage, for (range_declaration : range_expression), se développe en pseudocode suivant :
{ auto &range = range_expression; for (auto begin = begin_expr, end = end_expr; begin != end; ++begin) { range_declaration = *begin; loop_statement } }
C 17 Extrémité Découplée Types :
En C 17, le pseudocode étendu de la boucle for basé sur une plage a été modifié en :
{ auto &range = range_expression; auto begin = begin_expr; auto end = end_expr; for (; begin != end; ++begin) { range_declaration = *begin; loop_statement } }
Ce changement permet au type d'itérateur de fin de différer du type d'itérateur de début. Il permet l'utilisation d'itérateurs « sentinelles » qui prennent uniquement en charge les comparaisons d'inégalités avec le type d'itérateur de début.
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!