在 C++ 中创建向量数组

Create an Array of vectors in C++

我想创建一个大数据集的距离矩阵,并且只想存储 '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);
            }
        }

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

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

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