C++ Как динамически создать 2D вектор

Я пытаюсь создать вектор NXN, который я могу позже cout в виде таблицы / матрицы. Xcode указывает на = в for цикл и говорит мне No viable overloaded '=', Я не знаю, что это значит или как это исправить.

int n=5;
vector< vector<int> > row(n);
for (int i=0; i<n; i++) {
   row[i] = new vector<int> column(n);
}

Тоже попробовал, но Xcode тоже не понравился и на этот раз указал на column и сказал Expected ')':

int n=5;
vector< vector<int> > row;
for (int i=0; i<n; i++) {
   row.push_back(new vector<int> column(n));
}

Я предполагаю, что это как-то связано с тем, как я объявляю новый вектор column внутри for петля. Любая помощь / совет очень ценится. Благодарю.

3 ответа

Решение

Попробуйте следующее

int n = 5;
std::vector< std::vector<int> > row(n);
for (int i=0; i<n; i++) {
   row[i].push_back( std::vector<int>(n) );
}

или же

int n = 5;
std::vector< std::vector<int> > row(n, std::vector<int>( n ) );

Простое решение заключается в использовании соответствующего конструктораstd::vector, инициализируя его n элементы, каждый из которых имеет значение val - петли не нужны.

std::vector<T> (n, val);

Имея ваш оригинальный фрагмент, мы получим следующее, которое инициализирует строку n std:: vector s, каждый из которых имеет n элементы.

std::vector<std::vector<int> > row (n, std::vector<int> (n));

Когда конструктор row называется, все элементы тоже инициализированы. Я думаю, что этот код делает то, что вы хотите сделать:

for (int i=0; i<n; i++) {
    row[i].resize(n);
}

Теперь все элементы строки будут иметь размер n,

Другие вопросы по тегам