如何将输入正确读取到二维向量中,vector<vector<int>> 在 C++ 中

how to read input properly into a 2D vector, vector<vector<int>> in c++

我需要使用 vector < vector > int > > 在具有 n 列和 n 行的矩阵上找到每一行的总和。

例如,如果这是输入,

n = 4 
1 2 3 4
1 1 1 2
2 2 41 8
3 3 10 2

输出应该是

10
5
53
18

到目前为止,这是我的代码:

vector<vector<int>> A;
int n, x;

cin >> n;

for (int i = 0; i < n; ++i) 
     for(int j = 0; j < n; ++j)
         cin >> x, A[i].emplace_back(x);

for(int i = 0 ; i < n ; ++i)
{
     int sum = accumulate(A[i].begin(), A[i].end(), 0);
     cout << sum << "\n";
}

另外我觉得我对矩阵的阅读也不好

如能提供帮助,将不胜感激!

谢谢!

要读入 2D 向量,您需要为每一行读入 1D 向量,然后将该 1D 向量添加到 2D 向量。你可以这样做:

for (int i = 0; i < n; ++i) 
{ 
  std::vector<int> row;
  for(int j = 0; j < n; ++j)
  {
    cin >> x;
    row.push_back(x);
  }
  A.push_back(row);
}

您甚至可以为整个二维向量分配 space,然后直接读入正确的位置,如下所示:

auto A = std::vector<std::vector<int>>(n, std::vector<int>(n, 0));

for (int i = 0; i < n; ++i) 
  for(int j = 0; j < n; ++j)
    cin >> A[i][j];

您可以按照评论的建议进一步简化此过程

auto A = std::vector<std::vector<int>>(n, std::vector<int>(n, 0));

for (auto &row : A) 
  for(auto &element : row)
    cin >> element;

你总结行的代码似乎是合理的。

int n, x;

cin >> n;
vector<vector<int>> A(n);

for (int i = 0; i < n; ++i) 
    for(int j = 0; j < n; ++j)
        cin >> x, A[i].push_back(x);

for(int i = 0 ; i < n ; ++i)
{
    int sum = accumulate(A[i].begin(), A[i].end(), 0);
    cout << sum << "\n";
}

问题是您在向量的向量中没有向量时试图访问 A[i]

vector<vector<int>> A ----> {}
vector<vector<int>> A(4) ----->{{}{}{}{}} // constructor initializes with 4 empty vectors 

现在您可以访问 A[i],其中 returns 第 i 个向量对象,您可以在其上执行 push_back 以插入元素