2015-03-16 2 views
1

Я пытаюсь создать вектор n x n, который я могу позже cout в качестве таблицы/матрицы. Xcode указывает на = в цикле for и сообщает мне No viable overloaded '='. Я не знаю, что это значит или как это исправить.C++ Как динамически создавать 2D-вектор

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

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

ответ

1

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

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)); 
+0

Спасибо! Это сработало отлично. –

3

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

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

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

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

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

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

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

Смежные вопросы