0

我想创建一个大数据集的距离矩阵,并且只想存储足够接近的元素。代码是这样的

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

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

4

1 回答 1

4

在 C++ 中,您永远不应该使用malloc. 虽然malloc擅长分配内存,但仅此而已。它没有做的是调用构造函数,这意味着你所有的vector对象都是uninitialized。使用它们会导致未定义的行为

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


使用正确的向量构造函数,您可以初始化特定大小的向量:

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

在上面之后,您可以像以前一样使用现有的循环。

于 2016-04-08T10:47:32.107 回答