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 de la classe
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.
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'ai 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;
}
Si vous utilisez cpp11 (activez-le avec le -std=c++0x
flag si nécessaire), vous pouvez simplement initialiser le vecteur comme ceci:
// static std::vector<std::string> v;
v = {"haha", "hehe"};
Nous sommes en 2017, mais ce fil est en tête de mon moteur de recherche. Aujourd'hui, les méthodes suivantes sont préférées (listes d'initialisation).
std::vector<std::string> v = { "xyzzy", "plugh", "abracadabra" };
std::vector<std::string> v({ "xyzzy", "plugh", "abracadabra" });
std::vector<std::string> v{ "xyzzy", "plugh", "abracadabra" };
De https://en.wikipedia.org/wiki/C%2B%2B11#Initializer_lists
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<>
:
Solution MSVC 2010, car elle ne supporte pas std::initializer_list<>
pour les vecteurs mais il supporte std::end
const char *args[] = {"hello", "world!"};
std::vector<std::string> v(args, std::end(args));
idem @ Moo-Juice:
const char* args[] = {"01", "02", "03", "04"};
std::vector<std::string> v(args, args + sizeof(args)/sizeof(args[0])); //get array size
Jeter un coup d'œil à boost::assign
.
En C++ 0x, vous pourrez initialiser les conteneurs exactement comme des tableaux