91 votes

Comment déclarer un tableau de chaînes en C ++?

Je suis en train de parcourir tous les éléments d'un tableau statique de chaînes dans la meilleure façon possible. Je veux être en mesure de le déclarer sur une ligne et facilement ajouter/supprimer des éléments sans avoir à garder une trace du nombre. Les sons très simple, n'est-ce pas?

Possible non-solutions:

vector<string> v;
v.push_back("abc");
b.push_back("xyz");
for(i=0; i < v.size(); i++) cout << v[i] << endl;

Problèmes - pas moyen de créer le vecteur sur une seule ligne avec une liste de chaînes de caractères

Possible non-solution 2:

 chaîne de la liste[] = {"abc", "xyz"};

Problèmes - pas moyen d'obtenir le nombre de chaînes automatiquement (que je connais).

Il doit y avoir un moyen facile de faire cela ...

108voto

Anthony Cramp Points 1665

C ++ 0x introduit des listes d'initialisation qui vous permettront de faire:

 std::vector<std::string> v = {"Hello", "World"};
 

Probablement ne vous aide pas maintenant. Bien que GCC 4.4 supporte apparemment cela déjà .

37voto

Tyler Points 16516

Vous pouvez, de façon concise, initialiser un vector<string> d'une manière statique créée char* tableau:

char* strarray[] = {"hey", "sup", "dogg"};
vector<string> strvector(strarray, strarray + 3);

Cette fonction permet de copier toutes les chaînes, par la manière, si vous utilisez deux fois plus de mémoire. Vous pouvez utiliser Sera du Doyen de la suggestion de remplacer le nombre magique 3 ici avec arraysize(str_array) -- bien que je me souviens de la présence de quelques cas particulier dans lequel cette version particulière de arraysize pourrait faire quelque Chose de Mauvais (désolé je ne me souviens pas des détails immédiatement). Mais très souvent, fonctionne correctement.

Aussi, si vous êtes vraiment gung-ho sur une ligne de truc, vous pouvez définir un variadic macro de sorte qu'une seule ligne comme DEFINE_STR_VEC(strvector, "hi", "there", "everyone"); travaux.

26voto

Craig H Points 4224

La bibliothèque d'assignation de boost semble correspondre exactement à ce que vous recherchez. Cela facilite plus que jamais l’affectation de constantes aux conteneurs.

22voto

Will Dean Points 25866

Problèmes - aucun moyen d’obtenir le nombre de chaînes automatiquement (à ma connaissance).

Pour ce faire, il existe une méthode standard, selon laquelle beaucoup de personnes (y compris MS) définissent des macros telles que arraysize () pour:

 #define arraysize(ar)  (sizeof(ar) / sizeof(ar[0]))
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X