C++ std::string ajouter vs push_back()

C'est vraiment une question juste pour mon propre intérêt, je n'ai pas été en mesure de déterminer par le biais de la documentation.

Je vois sur http://www.cplusplus.com/reference/string/string/ qu'ajouter a la complexité:

"Quelconque, mais généralement linéaire dans la nouvelle longueur de la chaîne."

tout push_back() a la complexité:

"Non spécifié; Généralement amortis constante, mais jusqu'linéaire dans la nouvelle longueur de la chaîne."

Comme un jouet exemple, supposons que je voulais ajouter les caractères "toto" pour une chaîne de caractères. Serait

myString.push_back('f');
myString.push_back('o');
myString.push_back('o');

et

myString.append("foo");

montant exactement la même chose? Ou est-il une différence? Vous pourriez figure append serait plus efficace, car le compilateur ne sais combien de mémoire est nécessaire d'étendre la chaîne de caractères que le nombre spécifié de caractères, tandis que push_back peut-être besoin de sécuriser la mémoire à chaque appel?

En outre l'évident (les anciens sont trois appels de fonction et dernière partie), l'ancien pourrait provoquer des trois réaffectations. Personnellement, je préfère utiliser myString += "foo"; que je pense que c'est plus "naturel", même si c'est le même que le append appel.
Mots-clés: "jusqu'à". Mais c'est dommage qu'ils n'ont pas d'état le cas typique pour append, que le pire.
push_back doit être amorti à temps constant, donc la probabilité de trois allocations pour chaque application que je suis au courant, c'est zéro. La plupart des start avec une certaine taille raisonnable (plus de 1 ou 2) et développer le sous-jacent de la mémoire tampon géométriquement (par un facteur de 1,5 ou 2 fois par l'augmentation de la taille).

OriginalL'auteur Memento Mori | 2013-02-26