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
,