web-dev-qa-db-fra.com

Vecteur C++ du tableau de caractères

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

23
aHunter

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 );
63
anon

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.

11
Tronic

Utilisez std::string au lieu de char-arrays 

std::string k ="abcde";
std::vector<std::string> v;
v.Push_back(k);
2
Prasoon Saurav

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])));
2
missingfaktor

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'};
1
MAOXU

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;
}
0