将1d向量转换为2d向量

时间:2013-04-20 19:39:20

标签: vector 2d type-conversion

#include <iostream>
#include <vector>

int main()
{
  std::vector<std::vector<double> > DV;   //2d vector
  std::vector<double>temp(8,0.0);  //1d vector

  temp[0] = 1;
  temp[1] = 2;
  temp[2] = 3;
  temp[3] = 4;
  temp[4] = 5;
  temp[5] = 6;
  temp[6] = 7;
  temp[7] = 8;

  DV.resize(3, temp); 

  for (int i = 0; i < DV.size(); i++)
  {
      for (int j = 0; j < DV.size(); j++)
      {
        std::cout << DV[i][j];
      }
  }
std::cin.get();
}

转换实际上有效,但它没有给出预期的结果。输出应为:

1 2 3
4 5 6
7 8

并输出:

123123123

提前致谢

2 个答案:

答案 0 :(得分:1)

我不知道将1D矢量自动转换为2D矢量的方法。手动做起来并不难,但是......

typedef std::vector<std::vector<double>> DoubleVector2D;

DoubleVector2D boxed(size_t cols, std::vector<double> values) {
    DoubleVector2D result;
    for (std::size_t i = 0; i < values.size(); ++i) {
        if (i % cols == 0) result.resize(result.size() + 1);
        result[i / cols].push_back(values[i]);
    }
    return result;
}

完成后,您可以调用boxed(3, temp)来获取双向量向量。那时,你只需要循环它们。

for (auto row : DV) {
    for (auto value : row) {
         std::cout << value << ' ';
    }
    std::cout << "\n";
}

如果你遇到没有体面的C ++ 11支持,你可能需要使用计数器或迭代器。

for (int row = 0; row < DV.size(); ++row) {
    for (int col = 0; col < DV[i].size(); ++col) {
        std::cout << DV[row][col] << ' ';
    }
    std::cout << '\n';
}

答案 1 :(得分:0)

更改此行

for (int i = 0; i < DV.size(); i++){
    for (int j = 0; j < DV.size(); j++){
        std::cout << DV[i][j] << ", ";
    }
    std::cout << std::endl;
}

您的问题是如何将您的值打印到标准输出。