L'utilisation d'un std :: string iterator pour trouver le début et la fin de celui-ci est la chaîne

StackOverflow https://stackoverflow.com/questions/2368679

  •  24-09-2019
  •  | 
  •  

Question

Étant donné juste un std :: string iterator, est-il possible de déterminer les points de début et de fin de la chaîne? En supposant que je n'ai pas accès à l'objet de chaîne et ne peut donc pas appeler string.begin () et string.end (), et tout ce que je peux faire est augmenter ou réduire la iterator et tester la valeur.

Merci, Phil

Était-ce utile?

La solution

La réponse courte est non. La réponse longue est, parce itérateurs ne sont pas censés connaître les conteneurs ou les plages qui itérez, ils ne sont censés

  • être en mesure de passer à l'élément suivant (ou inc décembre au suivant ou précédent)
  • déréférencement eux-mêmes afin de révéler une référence à la valeur qu'ils pointent vers
  • Et sur le parcours se comparer avec d'autres itérateurs surtout un itérateur « fin » d'une certaine sorte.

En outre certains types itérateurs peuvent faire plus que ce qui précède, mais surtout ils sont tous tenus d'avoir / effectuer ci-dessus sous une forme ou une autre.

Autres conseils

  • Pour le point final de la chaîne: Supposons que la chaîne de caractères interne est zéro terminal. Puis, à travers le déréférencement iterator pour voir si elles sont « \ 0 » pour déterminer la position suivante est le point final. Mais pour autre chaîne non terminée par zéro, il est impossible d'apprendre à connaître ces informations.
  • Pour le point de départ de la chaîne: Pas moyen de faire une telle chose.

La valeur par défaut std :: string :: iterator est juste un hasard, itérateur bidirectionnel, ne sait rien au sujet de récipient.

Mais si vous travaillez sur la plate-forme Visual C, vous pouvez peut-être utiliser une certaine façon le piratage comme suit pour obtenir le contrôle à son conteneur, mais il est très dangereux:

  // it is the passed in string::iterator parameter.
  if (it._Has_container()) {
      string* strRef = (string*)it._Mycont;
  }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top