Создайте массив векторов в Stack Overflow

Я хочу создать матрицу расстояний для большого набора данных и хочу хранить только достаточно «близкие» элементы. Код читается так

vector<double> * D;
D = (vector<double> *) malloc(dim *sizeof(vector<double>) ) ;

for(i=0;i<dim;i++){
for(j=i+1;j<dim;j++){
dx = s[j][0] - s[i][0];
dy = s[j][1] - s[i][1];
d =   sqrt( dx*dx + dy*dy );
if(d  < MAX_DISTANCE){
D[i].push_back(d);
D[j].push_back(d);
}
}

что дает мне ошибку сегментации. Я думаю, что я не определил массив вектора правильно. Как мне обойти это?

0

Решение

В C ++ вы должны никогда выделить объект (или массив объектов), используя malloc, В то время как malloc хорош в распределении памяти, это все, что он делает. Что это не делать вызывает конструкторы, что означает, что все ваши vector объекты неинициализированным. Использование их приведет к неопределенное поведение.

Если вы хотите выделить массив динамически, вы должны использовать new[], Или, еще лучше, используйте std::vector (да, вы можете иметь вектор векторов, std::vector<std::vector<double>> Это хорошо).


Используя право векторный конструктор Вы можете инициализировать вектор определенного размера:

// Create the outer vector containing `dim` elements
std::vector<std::vector<double>> D(dim);

После вышесказанного вы можете использовать существующие циклы, как и раньше.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]