2016-05-14 1 views
1

J'ai quelques sorta de code comme ceci:entier ne peut pas insérer dans le vecteur multidimensionnel

vector< vector<int> > vec; // multidimensional vector 
while (condition) 
{ 
    vec.push_back(vector<int>()); // add subvectors to vec 
    for (int i = 0; i < number; i++) 
    { 
     vec[vec.size()].push_back(i); // add integers to those subvectors (the problem) 
    } 
} 

J'utilise vec[vec.size()] pour obtenir le dernier élément dans mon principal vecteur pour insérer un entier en elle. Je ne comprends pas pourquoi, mais je reçois toutes sortes d'erreurs de ce code. Qu'est-ce que je fais mal?

+0

'vec [vec.size()]' = recette pour un comportement indéfini. Et Fyi, il serait beaucoup plus logique de remplir un vecteur, puis de le pousser dans le vecteur externe comme la dernière chose avant la prochaine itération de la boucle while. – WhozCraig

Répondre

0

Comme vous le savez que l'indexation en C/C++ est de [0, taille 1] ainsi d'insérer des entiers dans le dernier vecteur dans votre vecteur de vecteurs utilisent le code suivant

vec[vec.size()-1].push_back(i); 
1

Une façon plus commune est de le faire comme suit:

vector< vector<int> > vec; // multidimensional vector 
vector<int> a; 
// push back elements to a 
vec.push_back(a); 
0

Puisque personne ne mentionne pas, vous pouvez le faire:

vec[x][y] = 5; 

il fonctionnera comme un mon attente.

Mais personnellement, j'ai trouvé "Eissa N." solution mieux.

+1

Juste pour commenter que 'vec [x] [y] = 5;' nécessite d'abord le redimensionnement du vecteur dans les deux dimensions. –

+0

si je connais les dimensions, j'irais avec votre solution + 'vec.reserve()' – Nick