在C ++中将异构向量转换为数组

时间:2014-04-21 19:11:09

标签: c++

我正在寻找将三维矢量转换为三维数组的解决方案。

我可以创建一个循环来复制三维向量中的数组内容,但是有一个问题:向量由非常异构的2D向量构成。

这是我框架的构造函数中的参数:

std::vector<std::vector<std::vector<double> > >& Mdonnees

第一个大小不是问题,第二个大小是文件中捕获的行数,最后一个大小总是2(每行的数据数)

[quantity of datasets][quantity of lines][quantity of data/line]

对于使用freechart函数Addserie(在XY图中),我需要一个2D数组的数组,所以我可以添加以前用简单循环得到的系列。 我需要能够在这个数组的第一个维度的每个元素中得到一个类似的数组:

double data1[][2] = {
    { 10, 20, },
    { 13, 16, },
    { 7, 30, },
    { 15, 34, },
    { 25, 4, },
};

谢谢

2 个答案:

答案 0 :(得分:2)

如果我正确理解你的问题,三个嵌套循环确实应该工作 - 一个循环遍历每个vector<vector<double> >,两个循环内部使用vector<double>构建你需要的二维数组s和double s。

编辑:澄清一下,你不需要三维数组。相反,vector<double[][] >可能更适合您的目的,因为每个二维数组可以是不同的大小。

答案 1 :(得分:0)

问题有点模糊,但根据我的理解,这应该有效:

int n_rows = 0; // the number of rows in the array
for (unsigned i = 0; i < Mdonnees.size(); ++i)
  for (unsigned j = 0; j < Mdonnees[i].size(); ++j)
    ++n_rows; // since the 2D vectors have different size, compute the number of rows this way
double **data1 = new double*[n_rows];
for (int i = 0; i < n_rows; ++i)
  data1[i] = new double[2]; // allocate memory for the array
int row = 0;
for (unsigned i = 0; i < Mdonnees.size(); ++i)
  for (unsigned j = 0; j < Mdonnees[i].size(); ++j)
    for (unsigned k = 0; k < 2; ++k)
      data1[row++][k] = Mdonnees[i][j][k]; // convert data
// work with array
// ...
for (int i = 0; i < n_rows; ++i)
  delete[] data1[i];
delete[] data1; // free the memory