在 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);
完成上述操作后,您可以像以前一样使用现有循环。
我想创建一个大数据集的距离矩阵,并且只想存储 '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);
完成上述操作后,您可以像以前一样使用现有循环。