Как заполнить `std :: vector <std :: vector <T>>` значениями по умолчанию? - PullRequest
5 голосов
/ 11 ноября 2011

Итак, я пытаюсь это сделать:

std::vector< std::vector<int> > matrix(4);

matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
matrix[0][3] = 1;

matrix[1][0] = 1;
matrix[1][1] = 2;
matrix[1][2] = 3;
matrix[1][3] = 1;

matrix[2][0] = 1;
matrix[2][1] = 2;
matrix[2][2] = 3;
matrix[2][3] = 1;

matrix[3][0] = 1;
matrix[3][1] = 2;
matrix[3][2] = 3;
matrix[3][3] = 1;

Но что-то идет не так, и мое приложение умирает во время выполнения = (Что делать? Как правильно вставить значения в вектор векторов?

Ответы [ 2 ]

11 голосов
/ 11 ноября 2011

Используйте это:

std::vector< std::vector<int> > matrix(4, std::vector<int>(4));

Это инициализирует ваш внешний вектор с 4 копиями std::vector<int>(4).

2 голосов
/ 11 ноября 2011

В этом случае вы можете сделать шаг Бьёрна еще на шаг дальше и полностью инициализировать 2D-вектор, как вы обрисовали в общих чертах с указанными вами значениями:

std::vector<int> tmp(4,0); 
tmp[0] = 1;
tmp[1] = 2;
tmp[2] = 3;
tmp[3] = 1;

std::vector< std::vector<int> > matrix(4, tmp);

Можно просто написать его как:

std::vector<int> tmp(4,1); 
tmp[1] = 2;
tmp[2] = 3;

std::vector< std::vector<int> > matrix(4, tmp);

но я часто отдаю предпочтение первому для ясности.

...