0
#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

提前致谢

4

2 回答 2

1

我不知道有一种方法可以自动将一维向量转换为二维向量。不过手动操作也不算太难...

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';
}
于 2013-04-20T20:14:57.407 回答
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;
}

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

于 2013-04-20T19:41:03.687 回答