Как присвоить значение элементу в 2D вектор в C ++? - PullRequest
0 голосов
/ 08 января 2019

Как я могу назначить номер определенному элементу 2D вектора, не изменяя другие элементы в строке?

Я пытаюсь присвоить значение элементу в 2D-векторе, но значение присваивается всей строке в векторе.

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

vector<vector<int> > generateMatrix(int A) {
    vector<vector<int> > ans(A, vector<int> (A, 0));
    ans[1][1] = 1;
    return ans;
}

int main() {
    int A = 4;
    vector<vector<int> > abc(A, vector<int>(A, 0));
    abc = generateMatrix(A);
    prinVec2D(abc);
    return 0;
}

Ожидаемое:

0 0 0 0 \ n 0 1 0 0 \ n 0 0 0 0 \ n 0 0 0 0 \ n

Выход:

0 0 0 0 \ n 1 1 1 1 \ n 0 0 0 0 \ n 0 0 0 0 \ n

Ответы [ 4 ]

0 голосов
/ 08 января 2019

Вместо того, чтобы индексировать (и неправильно), вы можете просто ссылаться на элементы каждого вектора

void printVec2D(const std::vector<std::vector<int> > & outer)
{
  for(auto & inner : outer)
  {
    for(auto & value : inner)
    {
      std::cout << value << " "; 
    } 
    std::cout << std::endl;
  }
} 
0 голосов
/ 08 января 2019

Этот код может выполнять работу

#include<conio.h>
#include<iostream>
using namespace std;

int main()
{
    const int A = 4;
    int ans[A][A] = {0};
    int i, j;
    cout << "Original Sequence\n\n";
    for (i = 0; i < A; i++){
        for (j = 0; j < A; j++){
            cout << ans[i][j] << " ";
        }
        cout << endl;
    }
    //Value allocation
    ans[1][1] = 1;
    cout << "\nModified Sequence\n\n";
    for (i = 0; i < A; i++){
        for (j = 0; j < A; j++){
            cout << ans[i][j] << " ";
        }
        cout << endl;
    }
    _getch();
    return 0;
}

выход

Original Sequence

0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0

Modified Sequence

0 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0
0 голосов
/ 08 января 2019

В

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

cout << A[i][i] необходимо заменить на cout << A[i][j]

Назначение работает (конечно), вы просто неправильно печатаете свой массив

P.S. У PonWer есть хорошая идея представить, что вы неправильно печатаете свой массив

0 голосов
/ 08 января 2019

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

как:

//pseudo code
for(int i = 0, i < maxI; i++)
{
   string temp = "";
   for(int j = 0, j < maxJ; j++)
   {
      temp += array[1][j]; //note [1][j]
   }
   temp += newLine;
   //print temp
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...