J'essaie d'écrire un programme qui a un vecteur de tableaux de caractères et j'ai quelques problèmes.
char test [] = { 'a', 'b', 'c', 'd', 'e' };
vector<char[]> v;
v.Push_back(test);
Désolé, cela doit être un tableau de caractères, car je dois être capable de générer des listes de caractères car j'essaie d'obtenir une sortie similaire à.
a a a b a c a d
Est-ce que quelqu'un peut-il me montrer la bonne direction?
Merci
Vous ne pouvez pas stocker de tableaux dans des vecteurs (ni dans aucun autre conteneur de bibliothèque standard). Les éléments que stockent les conteneurs de bibliothèque standard doivent être copiables et assignables, et les tableaux ne sont ni l'un ni l'autre.
Si vous avez vraiment besoin de mettre un tableau dans un vecteur (ce que vous n'avez probablement pas - utiliser un vecteur de vecteurs ou un vecteur de chaînes est probablement ce dont vous avez besoin), vous pouvez envelopper le tableau dans une structure:
struct S {
char a[10];
};
puis créez un vecteur de structs:
vector <S> v;
S s;
s.a[0] = 'x';
v.Push_back( s );
Vous avez besoin
char test[] = "abcde"; // This will add a terminating \0 character to the array
std::vector<std::string> v;
v.Push_back(test);
De si vous vouliez faire un vecteur de caractère au lieu d'un vecteur de chaînes,
std::vector<char> v(test, test + sizeof(test)/sizeof(*test));
L'expression sizeof(test)/sizeof(*test)
sert à calculer le nombre d'éléments dans le test de tableau.
Utilisez std::string
au lieu de char-arrays
std::string k ="abcde";
std::vector<std::string> v;
v.Push_back(k);
Vous pouvez utiliser boost :: array pour le faire:
boost::array<char, 5> test = {'a', 'b', 'c', 'd', 'e'};
std::vector<boost::array<char, 5> > v;
v.Push_back(test);
Modifier:
Ou vous pouvez utiliser un vecteur de vecteurs comme indiqué ci-dessous:
char test[] = {'a', 'b', 'c', 'd', 'e'};
std::vector<std::vector<char> > v;
v.Push_back(std::vector<char>(test, test + sizeof(test)/ sizeof(test[0])));
Vous pouvez directement définir un vecteur de type char comme ci-dessous.
vector<char> c = {'a', 'b', 'c'};
vector < vector<char> > t = {{'a','a'}, 'b','b'};
Ce que j’ai découvert, c’est que c’est bien de mettre char * dans un std :: vector
// 1 - A std::vector of char*, more preper way is to use a std::vector<std::vector<char>> or std::vector<std::string>
std::vector<char*> v(10, "hi!"); // You cannot put standard library containers e.g. char[] into std::vector!
for (auto& i : v)
{
//std::cout << i << std::endl;
i = "New";
}
for (auto i : v)
{
std::cout << i << std::endl;
}