2015-07-25 2 views
-1

length() renvoie le nombre de caractères dans la chaîne et size() renvoie un size_t qui est également identique mais utilisé pour le rendre cohérent avec les autres conteneurs STL.Quel est le plus rapide C++ String length() ou size()?

Pour le calcul length(), la chaîne parcourt tous les caractères et compte la longueur. Donc, O(n) fois.

Est-ce que size() est également identique?

Ou la taille d'une variable peut-elle être calculée directement en O(1)? Donc, ma question est, sont-ils les mêmes en termes de vitesse (comme dans la façon dont ils sont calculés) ou est la taille calculée en O(1) temps?

+0

Essayez d'exécuter une boucle sur un ensemble de données (Et calculez l'heure), vous saurez laquelle est rapide. –

+4

Qu'est-ce qui vous fait penser que 'longueur()' est O (n)? –

+0

O (n) de la taille de l'entrée? car il devra parcourir tous les caractères de la chaîne? – ronilp

Répondre

4

Les deux ont la même complexité: Constante.

du projet de travail N4431, §21.4.4

size_type size() const noexcept;

Retourne un compte du nombre d'objets char comme actuellement dans la chaîne. Complexité: temps constant.

Et

size_type length() const noexcept;

Renvoie: la taille().


[...] itère à travers tous les caractères et compte la longueur [...]

C'est des chaînes C vous pensez.

2

Si vous jetez un oeil à la documentation here, il est dit que length et size sont les mêmes.

Les deux chaînes: size et string :: length sont synonymes et retournent la même valeur.

Si vous jetez un coup d'œil sur le code, la longueur est mise en cache, donc la complexité est O(1). (Code de l'implémentation MS mais je suis sûr que les autres bibliothèques sont faites de la même manière.)

size_type length() const _NOEXCEPT 
    { // return length of sequence 
    return (this->_Mysize); 
    } 

size_type size() const _NOEXCEPT 
    { // return length of sequence 
    return (this->_Mysize); 
    } 
0

Ils sont équivalents. De plus, les chaînes ne comptent pas les caractères lors du retour de la taille, c'est-à-dire les tableaux char, si les chaînes comptaient toujours des caractères, elles seraient trop lentes.