Как я могу напечатать свой 2D вектор в матричной форме? C ++ - PullRequest
1 голос
/ 13 марта 2020

Я создал двухмерный вектор, который заполняется значениями в текстовом файле. Предоставленные значения всегда будут N * N, поэтому мой вопрос, как я могу распечатать вектор векторов в матричной форме, то есть в сетке 3x3. Пока что мой код выглядит следующим образом:

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main()
{
    //Declaration
    string line;
    ifstream myfile("example.txt");
    int n;
    int x;
    myfile >> n;

    //Creation of 2D vector
    vector<vector<int> > grid;
    for(int i = 0; i < n; i++){
        vector<int> temp;
        for(int j = 0; j < n; j++){
            while (myfile >> x){
                temp.push_back(x);
            }
        }
        grid.push_back(temp);
    }

    //Display the elements of the 2D vector

    for (int i=0; i<grid.size(); i++){
        for (int j = 0; j<grid[i].size(); j++){
            cout << "[" << grid[i][j] << "]";
        }
    }
    return 0;
}

Как видите, я пытался добавить cout << "[" << grid [i] [j] << "]"; чтобы сделать это, но при этом выводится только одна строка всех значений, любая помощь будет принята с благодарностью! </p>

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Так что мне удалось выяснить это с помощью @Джона, поскольку он упомянул количество векторов, которые у меня были. Я не учел, что я, возможно, только что заполнил первый вектор (j = 0) значениями вместо того, чтобы иметь 3 в j = 0,1,2. В конце я использовал код:

for (int i=0; i<grid.size(); i++){
    for (int j = 0; j<grid[i].size(); j++){
        cout << "[" << grid[i][j] << "] ";
        if((j+1)%n == 0){
            cout << endl;
        }
    }
}

Это выглядело так, как я и просил, но у меня была основная проблема, так как все они были в 1 подвекторе. Это было просто исправлено путем изменения:

while (myfile >> x) { ... }

на:

if (myfile >> x) { ... }

Надеюсь, это может помочь некоторым из вас!

0 голосов
/ 13 марта 2020

Ставьте новую строку после каждого l oop через i?

for (int i=0; i<grid.size(); i++) {
    for (int j = 0; j<grid[i].size(); j++) {
        cout << "[" << grid[i][j] << "]";
    }
    // Add a new line after every row
    cout << endl;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...