85 votes

Initialiser un tableau vectoriel de chaînes

Serait-il possible d'initialiser un tableau vectoriel de chaînes.

par exemple:

static std::vector<std::string> v; // déclaré en tant que membre du groupe

J'ai utilisé static juste pour l'initialiser et le remplir avec des chaînes. Ou devrais-je simplement le remplir dans le constructeur s'il ne peut pas être initialisé comme nous le faisons avec des tableaux classiques.

68voto

Steve Jessop Points 166970

Sorte de:

 class some_class {
    static std::vector<std::string> v; // declaration
};

const char *vinit[] = {"one", "two", "three"};

std::vector<std::string> some_class::v(vinit, end(vinit)); // definition
 

end est juste pour que je n'aie pas à écrire vinit+3 et le garder à jour si la longueur change plus tard. Définissez-le comme:

 template<typename T, size_t N>
T * end(T (&ra)[N]) {
    return ra + N;
}
 

15voto

Moo-Juice Points 22190
  const char* args[] = {"01", "02", "03", "04"};
 std::vector<std::string> v(args, args + 4);
 

Et en C ++0x, vous pouvez tirer parti de std::initializer_list<> :

http://en.wikipedia.org/wiki/C%2B%2B0x#Initializer_lists

11voto

Tom Points 849

Solution MSVC 2010, car elle ne prend pas en charge std::initializer_list<> des vecteurs mais prend en charge std::end

 const char *args[] = {"hello", "world!"};
std::vector<std::string> v(args, std::end(args));
 

5voto

Mark Kahn Points 79

Identique à @ Moo-Juice:

 const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size
 

2voto

Nikolai N Fetissov Points 52093

Regardez boost::assign .

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