Ошибка при попытке отклонить элемент в 2D вектор - PullRequest
2 голосов
/ 19 марта 2020

Новый для C ++ здесь. У меня есть переменная-указатель типа vector, которую я инициализировал как n на m, где n и m - это int, заданные в качестве входных данных. Вот как я его инициализирую.

std::vector<std::vector<int>>* memo; // This is as a member.

void test(int m, int n) {
    memo = new std::vector<std::vector<int>>(m, *new std::vector<int>(n, 0)); // This is inside a method.
}

Позже я пытаюсь назначить определенный элемент.

int ans = 5; // In my actual code, it's something else, but I'm just simplifying it.
memo[i][j] = ans; // This gives an error.

Я думал, что мне просто нужно почтить его, потому что сейчас это тип указателя. Поэтому я изменил это на следующее:

*memo[i][j] = ans;

Однако теперь я получил новую ошибку:

C++ no operator matches these operands            operand types are: * std::vector<int, std::allocator<int>>

Почему это не работает, и как я могу заставить его работать?

1 Ответ

1 голос
/ 19 марта 2020

Для начала это объявление

std::vector<std::vector<int>>* memo;

не имеет большого смысла. Было бы лучше объявить элемент данных как

std::vector<std::vector<int>> memo;

Это распределение

memo = new std::vector<std::vector<int>>(m, *new std::vector<int>(n, 0));

Неверно. Элементы вектора не являются указателями. Вы должны написать

memo = new std::vector<std::vector<int>>(m, std::vector<int>(n, 0)); 

или

memo = new std::vector<std::vector<int>>(m, std::vector<int>(n ));

Кажется, это является причиной других ваших проблем.

Чтобы установить значение для такого вектора, вы должны написать например

( *memo )[i][j] = ans;

Если объявить элемент данных не указателем, как, например,

std::vector<std::vector<int>> memo;

, то в функции вы можете назначить его как

memo.assign( m, std::vector<int>( n ) );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...