2010-06-21 6 views
1

faut-il constante de temps pour déplacer le iterator aux éléments de chaîne en suivant:Itération std :: éléments de chaîne

std::string str // string of size 100 MB 
std::string::iterator iter = str.begin(); 
std::advance(iter, str.size()-1); 

serait-il constante de temps dans la recherche par index?

char c = str[str.size()-1]; 
+1

N'utilisez string :: itérateur que si vous voulez vraiment muter. Il déclenche la copie sur écriture et cela provoque des résultats de profilage confus. – pmr

Répondre

3

Oui, c'est correct. Ceci est garanti par la norme C de (§24.3, opérations Iterator):

Depuis que itérateurs accès aléatoire fournissent opérateurs + et -, la bibliothèque fournit deux modèles de fonction à l'avance et de distance. Ces modèles de fonction utilisent + et - pour les accès aléatoires (et sont donc temps constant pour eux); Pourquoi diable utiliseriez-vous le code supérieur à la place de str.end() - 1?

0

Éditer: Ou str.back(), qui est beaucoup plus générique de conteneur.

+0

Plus d'un commentaire. :) – GManNickG

+0

Il ne compte pas sur iter étant un itérateur à accès aléatoire. Dans le cas spécifique ce n'est pas important mais pourrait si c'est trop simplifié. – pmr

Questions connexes