4 votes

Sortie C++ Vecteur 2D

J'ai écrit deux for et s'attendaient à ce qu'elles produisent chaque valeur dans un vecteur appelé data mais ça ne marche pas. Il y a une erreur relative à data[i].at(j) que je ne comprends pas bien.

vector<int> data; //it is filled with some integers with x rows and y columns

for ( int i = 0; i < data.size(); ++i) {
    for ( int j = 0; j < col; ++j ) {
        cout << data[i].at(j) << ' ';
    }

    cout << endl;
}

J'ai également essayé cette méthode, mais elle ne fonctionne pas non plus. data.at(i).at(j) a une erreur.

for ( int i = 0; i < data.size(); ++i ) {
    for ( int j = 0; j < col; ++j ) {
        cout << data.at(i).at(j) << ' ';
    cout << endl;
}

Est-ce que l'un ou l'autre peut fonctionner avec une petite correction ou est-ce qu'ils ne fonctionnent pas du tout ?

4voto

gsamaras Points 9567

Concentrez-vous ici :

data[i].at(j) 

Lorsque vous indexez votre vecteur à la position i vous obtenez le i ème numéro de celui-ci. C'est-à-dire du type int .

Ensuite, vous demandez une méthode nommée at() sur un int . Ceci n'est pas fourni par le type primitif int .

Si vous essayez d'émuler un vecteur 2D avec un 1D, vous pouvez le faire :

for (int i = 0; i < data.size(); ++i)
{
    for (int j = 0; j < col; ++j)
        cout << data[i + j * col] << ' ';
    cout << endl;
}

0voto

Edwin Pratt Points 403

Je trouve cela plus facile en imprimant le contenu d'un Vector 2D exactement comme un tableau 2D.

Exemple :

Disons que nous avons un vecteur 2D appelé matrice et qu'il contient 5 valeurs sur 5 :

1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5,
1, 2, 3, 4, 5

Nous avons besoin de sortir la matrice, donc nous utiliserons :

// The matrix:
vector <vector <int> > matrix ;

// The Row container:
vector <int> row

// The creation of the row:
for (int i = 1 ; i <= 5 ; i = i + 1) {
    row.push_back (i) ;
}

// The creation of the matrix.
for (int j = 1 ; j <= 5 ; j = j + 1) {
    matrix.push_back (row) ;
}

// Print the matrix
for (int k = 0 ; k < matrix.size () ; k = k + 1) {
    for (int l = 0 ; l < matrix [k].size () ; l = l + 1) {
        cout << matrix [k] [l] << ' ' ;
    }

    cout << endl ;
}

L'exemple ci-dessus fonctionnera également si vous avez des rangées de tailles différentes :

1, 2, 3, 4,

1, 2,

1, 2, 3,

1, 2, 3, 4, 5

1

Cependant, elle nécessitera alors l'intervention de l'utilisateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X