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

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)それが完了すると、 double のベクトルのベクトルを取得するために呼び出すことができます。その時点で、それらをループするだけです。

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 に答える