2015-12-10 1 views
1

J'ai codé en Borland C++ il y a des siècles, et maintenant j'essaie de comprendre le "nouveau" (pour moi) C + 11 (je sais, nous sommes en 2015, il y a un c + 14 ... mais je travaille sur un projet C++ 11)std :: string :: assign vs std :: string :: operator =

Maintenant j'ai plusieurs façons d'assigner une valeur à une chaîne.

#include <iostream> 
#include <string> 
int main() 
{ 
    std::string test1; 
    std::string test2; 
    test1 = "Hello World"; 
    test2.assign("Hello again"); 

    std::cout << test1 << std::endl << test2; 
    return 0; 
} 

Les deux fonctionnent. J'ai appris de http://www.cplusplus.com/reference/string/string/assign/ qu'il existe d'autres façons d'utiliser assign. Mais pour une simple assignation de cordes, laquelle est la meilleure? Je dois remplir 100+ structs avec 8 std: string chacun, et je cherche le mécanisme le plus rapide (je ne me soucie pas de la mémoire, sauf s'il y a une grosse différence)

Répondre

3

Les deux sont également rapides, mais = "..." est plus clair.

Si vous voulez vraiment rapide si, utilisez assign et spécifier la taille:

test2.assign("Hello again", sizeof("Hello again")); 
// or 
test2.assign("Hello again", 12); 

De cette façon, une seule allocation est nécessaire. (Vous pouvez également .reserve() suffisamment de mémoire à l'avance pour obtenir le même effet.)