【问题标题】:Print a vector of vectors打印向量的向量
【发布时间】:2018-11-14 02:39:33
【问题描述】:

我正在尝试在 C++ 中打印一个二维数组,但我遇到了问题。我按照传统方式在 for 循环中打印了一个向量 vectorName.size()。所以我遵循的方式是这样的。

#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

我怎样才能正确打印我的矢量?

【问题讨论】:

  • 期望的输出是什么?为什么你忽略了打印的实际代码?这似乎是问题所在
  • 什么是A,什么是B?请提供minimal reproducible example
  • sizeof(B[i])/sizeof(int) -- 你为什么要这样做? vector 使用 size() 成员函数知道它拥有的元素数量。
  • 您的向量是否正确填充?它们是如何初始化的?请创建一个minimal reproducible example(此处强调“完成”...)。
  • 另外,由于impMat() 不修改向量,它们应该作为const&amp; 传递。

标签: c++ arrays vector printing


【解决方案1】:

问题基本上是你如何填充你的向量:

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

【讨论】:

    【解决方案2】:

    打印std::vectors 的std::vectors 的两种简单方式:

    #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');
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-03
      • 1970-01-01
      相关资源
      最近更新 更多