将矢量转换为数组

Converting vectors to an array

本文关键字:数组 转换      更新时间:2023-10-16

我在转换类型向量时遇到问题<vector>到数组。到目前为止,我已经尝试了以下操作(在/u/Robert Crovella的帮助下)

pos_x_h=(double *)malloc(N*sizeof(double));
pos_y_h=(double *)malloc(N*sizeof(double));
for (int i = 0; i<N; i++){
  vector<double> temp = r[i];
  pos_x_h[i] = temp[i][0];
  pos_y_h[i] = temp[i][1];
}

这里,r是具有N个元素的位置矢量,每个元素具有x和y分量。我也试过做

double arr[N];
std::copy(r.begin(), r.end(), arr); 

两次尝试都没有成功,我不知道为什么。你可以在这里看到代码。

以下内容应该有效。注意,我更喜欢sizeof *pos_x_h而不是sizeof(double),因为前者可以确保大小正确,即使您更改了变量的类型(可能在另一段代码中)更新*对于C++,您需要强制转换malloc的结果。我戴着我的C帽子在想…

第二次更新

更多的思考告诉我你真的不想把temp作为向量——这只会让事情变得更加混乱。相反,指向r[i]的第一个元素的地址:这编译时没有错误

    pos_x_h=(double *)malloc(N*sizeof(double));
    pos_y_h=(double *)malloc(N*sizeof(double));
    for (int i = 0; i<N; i++){
      double* temp;
      temp = &r[i][0];
      pos_x_h[i] = temp[0];
      pos_y_h[i] = temp[1];
    }

当然你可以简单地做

    pos_x_h=(double *)malloc(N*sizeof(double));
    pos_y_h=(double *)malloc(N*sizeof(double));
    for (int i = 0; i<N; i++){
      pos_x_h[i] = r[i][0];
      pos_y_h[i] = r[i][1];
    }

避免整个混乱。