用C ++创建一个向量数组

时间:2016-04-08 10:44:43

标签: c++ arrays stdvector distance-matrix

我想创建一个大数据集的距离矩阵,并且只想存储'close'足够的元素。代码读起来像这样

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

这给了我分段错误。我想我还没有正确定义向量数组。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

在C ++中,您应该从不使用malloc分配对象(或对象数组)。虽然malloc擅长分配内存,但就是这样。 做的是调用构造函数,这意味着所有vector对象都未初始化。使用它们将导致未定义的行为

如果要动态分配数组,则必须使用new[]。或者,更好的是,使用std::vector(是的,你可以有一个矢量矢量,std::vector<std::vector<double>>就可以了。)

使用右vector constructor,您可以初始化特定大小的矢量:

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

完成上述操作后,您可以像以前一样使用现有的循环。