Как поставить NULL во все ячейки матричного вектора? - PullRequest
1 голос
/ 20 сентября 2010

Я пытаюсь инициализировать все ячейки матрицы со значениями NULL, но здесь что-то не так.
код:

vector<vector<Distance*> > distanceMatrix;  
    for (int i = 0; i < 7 ; i++)
        for (int j = 0; j < 7 ; j++)
            distanceMatrix[i][j].push_back(NULL);  

Могу поспорить, что это что-то глупое, спасибо за помощь.

Ответы [ 2 ]

9 голосов
/ 20 сентября 2010

со справочной страницы std::vector :

Векторы могут быть построены с некоторыми значениями в них.

Вы можете попробовать:

vector<vector<Distance*> > distanceMatrix(7, vector<Distance*>(7, NULL));

Также по вашей проблеме:

vector<vector<Distance*> > distanceMatrix;  
    for (int i = 0; i < 7 ; i++)
        for (int j = 0; j < 7 ; j++)
            distanceMatrix[i][j].push_back(NULL); //1

Когда вы впервые набираете код //1, distanceMatrix[i] разрешается до distanceMatrix[0], но вы не вызывали distanceMatrix.push_back(vector<Distance*>()), поэтому вы ссылаетесь на неинициализированную ячейку.

Чтобы исправить код был бы:

vector<Distance*> vec;

for (int j = 0; j < 7 ; j++)
  vec.push_back(NULL);

vector<vector<Distance*> > distanceMatrix;

for (int i = 0; i < 7 ; i++)
{
    distanceMatrix.push_back(vec);
}

Что все еще намного хуже, чем мое первое предложение.

1 голос
/ 20 сентября 2010

Поскольку матрица для начала пуста, вам нужно push_back каждое значение и каждая строка, независимо от ее положения в матрице:

vector<Distance*> row;
for(int j=0; j < 7; j++)
    row.push_back(NULL);

vector<vector<Distance*> > distanceMatrix; 
for(int i=0; i < 7; i++)
    distanceMatrix.push_back(row);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...