web-dev-qa-db-fra.com

Vecteur de vecteurs pour créer une matrice

J'essaie de prendre une entrée pour les dimensions d'une matrice 2D. Et utilisez ensuite les entrées de l'utilisateur pour remplir cette matrice. J'ai essayé de le faire via des vecteurs (vecteurs de vecteurs). Mais j'ai rencontré des erreurs chaque fois que j'essayais 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 faire cela, cela me donne un indice en erreur hors de portée. Aucun conseil?

50
user1487000

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

Initialisez plutôt 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 réglés sur 0.

68
Luchian Grigore

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

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

Cela crée un vecteur de RR taille CC vecteurs, rempli de 0.

159
juanchopanza

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);
}
10
Shmiddty

Le vecteur doit être initialisé avant de l'utiliser comme cin>>v[i][j]. Même s’il s’agissait d’un vecteur 1D, il a toujours besoin d’une initialisation, voir ce lien

Après l'initialisation, il n'y aura pas d'erreur, voir ce lien

0
Mohit Malik

essaye ça. m = rangée, 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;
}
0
SubhaBhowmik

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

Une dernière chose, vous ne pouvez pas insérer directement de valeurs dans le vecteur en utilisant l'opérateur "cin". Utilisez une variable qui prend en entrée puis insérez la même chose 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
Shantanu Garg