web-dev-qa-db-fra.com

Quand dois-je utiliser une chaîne au lieu d'un chaîne de caractères?

Quand dois-je utiliser stringstream au lieu de string::append()? Supposons que je ne caténate que des cordes.

stringstream ss;
ss << str1 << "str2" << ...
Write(ss.str());

Ou:

string str;
str.reserve(10000);
str.append(str1);
str.append("str2");
...
Write(str);

Lequel est le plus rapide?

29
Lucas Lima

Je ne sais pas lequel sera le plus rapide, mais si je devais deviner, je dirais que votre deuxième exemple est, d'autant plus que vous avez appelé la fonction membre reserve pour allouer un grand espace pour l'expansion.

Si vous ne concaténez que des chaînes, utilisez string::append (ou string::operator+= ).

Si vous voulez convertir des nombres en leur représentation sous forme de chaîne, ainsi que les formater pendant la conversion, puis ajouter les résultats de la conversion ensemble, utilisez des chaînes de chaînes. Je mentionne explicitement la partie mise en forme car si vous n'avez pas besoin de mise en forme, C++ 11 propose std::to_string qui peut être utilisé pour convertir des types numériques en chaînes.

19
Praetorian

string.append est beaucoup plus rapide. Surtout lorsque vous réservez.

Si vous concaténez uniquement des chaînes, j'utiliserais string.append. Je n'utiliserais stringstream que si j'ai besoin de convertir automatiquement des non-chaînes en chaînes par exemple:

const int x(42);
stringstream ss;
ss << "My favorite number is: " << x << std::endl;

Ici, stringstream convertit automatiquement x en chaîne et l'ajoute. Je n'ai pas besoin d'appeler atoi. Stringstream convertira automatiquement tous les types de base pour vous. C'est formidable à cet effet.

De plus, si vous allez uniquement diriger des données dans le flux de chaînes pour les convertir ultérieurement en chaîne. Vous pouvez utiliser ostringstream qui est destiné à la sortie.

J'espère que ça aide.

17
anio