Question Vecteur de vecteurs pour créer une matrice


J'essaie de prendre en compte les dimensions d'une matrice 2D. Et ensuite, utilisez l’entrée utilisateur pour remplir cette matrice. La façon dont j'ai essayé de le faire est via des vecteurs (vecteurs de vecteurs). Mais j'ai rencontré des erreurs chaque fois que j'essaie de lire des données et de les ajouter à la matrice.

//cin>>CC; cin>>RR; already done
vector<vector<int> > matrix;
for(int i = 0; i<RR; i++)
{
    for(int j = 0; j<CC; j++)
    {
    cout<<"Enter the number for Matrix 1";
         cin>>matrix[i][j];
    }
}

Chaque fois que j'essaie de le faire, cela me donne une erreur d'indice de dépassement. Aucun conseil?


34
2017-09-11 18:18


origine


Réponses:


En l'état, les deux dimensions de votre vecteur sont 0.

Au lieu de cela, initialisez le vecteur comme ceci:

vector<vector<int> > matrix(RR);
for ( int i = 0 ; i < RR ; i++ )
   matrix[i].resize(CC);

Cela vous donnera une matrice de dimensions RR * CC avec tous les éléments mis à 0.


50
2017-09-11 18:19



Vous devez initialiser le vecteur des vecteurs à la taille appropriée avant d’accéder aux éléments. Vous pouvez le faire comme ceci:

// assumes using std::vector for brevity
vector<vector<int>> matrix(RR, vector<int>(CC));

Cela crée un vecteur de RR Taille CC vecteurs, remplis de 0.


110
2017-09-11 20:33



Je ne suis pas familier avec c ++, mais un rapide coup d’œil à la documentation suggère que cela devrait fonctionner:

//cin>>CC; cin>>RR; already done
vector<vector<int> > matrix;
for(int i = 0; i<RR; i++)
{
    vector<int> myvector;
    for(int j = 0; j<CC; j++)
    {
        int tempVal = 0;
        cout<<"Enter the number for Matrix 1";
        cin>>tempVal;
        myvector.push_back(tempVal);
    }
    matrix.push_back(myvector);
}

7
2017-09-11 18:25



essaye ça. m = ligne, n = col

vector< vector<int> > matrix(m,vector<int>(n));

for(i=0;i<m;i++)
{
   for(j=0;j<n;j++)
   {
      cin>>matrix[i][j];
   }
   cout<<endl;
}
cout<<"::matrix::"<<endl;
for(i=0;i<m;i++)
{
    for(j=0;j<n;j++)
    {
        cout<<matrix[i][j]<<" ";
    }
    cout<<endl;
}

1
2018-06-27 11:44



Ce que vous avez initialisé est un vecteur de vecteursdonc toi doit absolument inclure un vecteur à insérer("Poussé" dans la terminologie des vecteurs) dans le vecteur d'origine vous avez nommé matrice dans votre exemple.

Encore une chose, vous ne pouvez pas insérer directement des valeurs dans le vecteur en utilisant l'opérateur "cin". Utilisez une variable qui saisit les données et les insère dans le vecteur.

S'il vous plaît essayez ceci:

int num;
for(int i=0; i<RR; i++){

      vector<int>inter_mat;       //Intermediate matrix to help insert(push) contents of whole row at a time

      for(int j=0; j<CC; j++){
           cin>>num;             //Extra variable in helping push our number to vector
           vin.push_back(num);   //Inserting numbers in a row, one by one 
          }

      v.push_back(vin);          //Inserting the whole row at once to original 2D matrix 
}

0
2018-06-29 20:16