Распечатать вектор векторов - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь напечатать двумерный массив в c ++, но у меня проблема.Я следовал традиционному способу печати вектора vectorName.size() внутри цикла for.Итак, путь, которым я следую, был следующим.

#include <stdio.h>
#include <iostream>
#include <vector>
#include <math.h>
#include <time.h>


using namespace std;

void impMat(vector < vector <int> >, vector < vector <int> >);

int main () {
    vector < vector <int> > A;
    vector < vector <int> > B;
    vector <int> temp;

    for(int j = 0; j < 4; j++){
       for(int i = 0; i < 5; i++){
          temp.push_back(i);
       }
       A.push_back(temp);
       B.push_back(temp);
    }

    impMat(A,B);
    cout << endl;
    return 0;
}

void impMat(vector < vector <int> > A,vector < vector <int> > B) 
{
    for(int i = 0; i < A.size(); i++){
       for(int j = 0; j < A[i].size(); j++){
          cout << A[i][j] << " ";
       }
       cout << endl;
    }
    cout << endl;
    for(int i = 0; i < B.size(); i++){
       for(int j = 0; j < B[i].size(); j++){
          cout << B[i][j] << " ";
       }
       cout << endl;
    }
}

Но это что-то наподобие

0 1 2 3 4
0 1 2 3 4 0 1 2 3 4
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4
0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

Ожидаемый результат

0 1 2 3 4 
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4

Как мне правильно распечатать мои векторы?

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Проблема в основном в том, как вы заполняете свои векторы:

for(int j = 0; j < 4; j++)
{
     for(int i = 0; i < 5; i++)
     {
          temp.push_back(i);
     }
     A.push_back(temp);
     B.push_back(temp);
     // now temp yet contains all the values entered, so you produce:
     // 0, 1, 2, 3, 4 in first loop run,
     // 0, 1, 2, 3, 4 0, 1, 2, 3, 4 in second,
     // ...
     // most simple fix:
     temp.clear();
}

Более эффективно, так как вы все равно хотите иметь одни и те же данные:

for(int i = 0; i < 5; i++)
{
     temp.push_back(i);
}

for(int i = 0; i < 4; i++)
{
     A.push_back(temp);
     B.push_back(temp);
}
0 голосов
/ 14 ноября 2018

Два простых способа печати std::vector с std::vector с:

#include <vector>
#include <iostream>

int main()
{
    std::vector<std::vector<int>> foo{
        { 0, 1, 2, 3, 4 },
        { 0, 1, 2, 3, 4 },
        { 0, 1, 2, 3, 4 },
        { 0, 1, 2, 3, 4 }
    };

    // range-based for-loops:
    for (auto const &row : foo) {
        for (auto const &col : row) {
            std::cout << col << ' ';
        }
        std::cout.put('\n');
    }

    std::cout.put('\n');

    // ordinary for-loops:
    for (std::size_t row{}; row < foo.size(); ++row) {
        for (std::size_t col{}; col < foo[row].size(); ++col) {
            std::cout << foo[row][col] << ' ';
        }
        std::cout.put('\n');
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...