как правильно читать ввод в 2D вектор, вектор в с ++ - PullRequest
1 голос
/ 17 апреля 2020

Мне нужно найти сумму каждой строки, используя 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";
}

Также я не думаю, что мое чтение матрицы хорошее.

Если бы вы могли помочь, это было бы очень ценно!

Спасибо!

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

Для считывания в двухмерный вектор необходимо прочитать одномерный вектор для каждой строки, а затем добавить этот одномерный вектор в двухмерный вектор. Вы можете сделать что-то вроде этого:

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

Вы можете даже выделить место для всего 2D-вектора, а затем читать прямо в правильные позиции, например:

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;

Ваш код для суммирования строк кажется разумным.

1 голос
/ 17 апреля 2020
    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], который возвращает i-й вектор объект, для которого вы можете сделать push_back для вставки элемента

...