web-dev-qa-db-fra.com

Comment implémenter un tableau vectoriel 2D?

J'utilise pour la première fois la classe de vecteur dans la bibliothèque STL. Comment dois-je ajouter à une ligne spécifique du tableau de vecteurs?

struct x{
     vector <vector <int> > v;
     int row;
 };

vector< int* > my ints;
int add;

si je voulais ajouter à la première ligne de v avec le premier pointeur d'entiers, pourrais-je faire 

myints[0]->v[myints[0]->row].Push_back(add);

Cette méthode vous permet-elle de créer un vecteur 2D du vecteur ints où chaque ligne peut potentiellement être de longueur différente (c’est-à-dire avoir un nombre de colonnes différent)?

20
John Smith

Je ne sais pas exactement quel est le problème, car votre exemple de code comporte plusieurs erreurs et ne précise pas vraiment ce que vous essayez de faire. Mais voici comment vous ajoutez à une ligne spécifique d'un vecteur 2D:

// declare 2D vector
vector< vector<int> > myVector;
// make new row (arbitrary example)
vector<int> myRow(1,5);
myVector.Push_back(myRow);
// add element to row
myVector[0].Push_back(1);

Est-ce que cela répond à votre question? Si non, pourriez-vous essayer d'être plus précis quant aux problèmes avec lesquels vous avez des problèmes?

58
Moritz

Si vous connaissez le nombre (maximum) de lignes et de colonnes à l'avance, vous pouvez utiliser resize() pour initialiser un vecteur de vecteurs, puis modifier (et accéder à) des éléments avec operator[] . Exemple:

int no_of_cols = 5;
int no_of_rows = 10;
int initial_value = 0;

std::vector<std::vector<int>> matrix;
matrix.resize(no_of_rows, std::vector<int>(no_of_cols, initial_value));

// Read from matrix.
int value = matrix[1][2];

// Save to matrix.
matrix[3][1] = 5;

Une autre possibilité consiste à utiliser un seul vecteur et à diviser l'identifiant en plusieurs variables, avec un accès tel que vector[(row * columns) + column].

40
Roi Danton

Utilisez simplement les méthodes suivantes pour créer un vecteur 2D.

int rows, columns;        

// . . .

vector < vector < int > > Matrix(rows, vector< int >(columns,0));

OU 

vector < vector < int > > Matrix;

Matrix.assign(rows, vector < int >(columns, 0));

//Do your stuff here...

Cela créera une matrice de taille lignes * colonnes et l’initialisera avec zéros car nous passons un zéro (0) en tant que second argument du constructeur ie vector <int> (colonnes, 0 )

8
Aditya Goel

Nous pouvons facilement utiliser le vecteur comme tableau 2D. Nous utilisons la méthode resize () à cet effet . Le code ci-dessous peut être utile pour comprendre ce problème.

Extrait de code :

#include<bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    int row, col;
    cin>>row>>col;

    vector <vector<int>> v;
    v.resize(col,vector<int>(row));

    //v = {{1,2,3}, {4,5,6}, {7,8,9}}; 

    /** input from use **/
    for(int i=0; i<row; i++)
    {
       for(int j=0; j<col; j++)
       {
          cin>>v[i][j];
       }
    }

    for(int i=0;i<row; i++)
    {
       for(int j=0;j<col;j++)
       {
          cout<<v[i][j]<<" ";
       }
    }
    return 0;
}
4
rashedcs

Une autre façon de définir un vecteur 2D consiste à déclarer un vecteur de paires. 

 vector < pair<int,int> > v;

**To insert values**
 cin >> x >>y;
 v.Push_back(make_pair(x,y));

**Retrieve Values**
 i=0 to size(v)
 x=v[i].first;
 y=v[i].second;

Pour les vecteurs 3D, jetez un coup d'œil à Tuple et make_Tuple.

1
Varun Garg

J'utilise ce morceau de code. fonctionne bien pour moi. Copiez-le et lancez-le sur votre ordinateur. vous comprendrez par vous-même.

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector <vector <int> > matrix;
    size_t row=3 , col=3 ;
    for(int i=0,cnt=1 ; i<row ; i++)
    {
        for(int j=0 ; j<col ; j++)
        {
            vector <int> colVector ;
            matrix.Push_back(colVector) ;
            matrix.at(i).Push_back(cnt++) ;
        }
    }
    matrix.at(1).at(1) = 0;     //matrix.at(columns).at(rows) = intValue 
    //printing all elements
    for(int i=0,cnt=1 ; i<row ; i++)
    {
        for(int j=0 ; j<col ; j++)
        {
            cout<<matrix[i][j] <<" " ;
        }
        cout<<endl ;
    }
}
1
Ridowan Ahmed