所以我试图创建一个从打开的dat文件生成二维数组的函数。我正在尝试编译我的程序时遇到错误。下面是我的尝试,我的dat文件有8列,但行数比我可以计数的多,所以我试图创建一个动态分配数组或向量。任何帮助表示赞赏。
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <iomanip>
using namespace std;
double Comsic_Ray_Events(vector< vector<double> > cosmic_ray, vector <double> row_vector(columns));
int main()
{
return(0);
}
void Comsic_Ray_Events(vector< vector<double> > cosmic_ray, vector <double> row_vector(columns))
{
double row = 0.;
const double columns = 8.;
ifstream cosmic_ray_data;
vector< vector<double> > cosmic_ray;
vector <double> row_vector(columns);
cosmic_ray_data.open("events_comp-h4a_10.00-10000.00PeV_zen37.00.dat", ios::in);
if(cosmic_ray_data.is_open())
{
while(cosmic_ray_data.good())
{
cosmic_ray.push_back(row_vector);
for(int i = 0; i < columns; i++)
{
cosmic_ray_data >> cosmic_ray[row][i];
cout << setprecision(4) << cosmic_ray[row][i] << endl;
//row++;
}
row++;
}
}
else if(cosmic_ray_data.fail())
{
cout << "File didn't open correctly" << endl;
}
cosmic_ray_data.close();
}
答案 0 :(得分:0)
我在你的代码中看到了一些设计问题以及你的函数,我试着用或多或少的变量名写一个非常简单的例子,希望你理解它。 首先,我不知道为什么你会尝试使用void函数,如果你写的是你想要一个返回二维向量的函数。其次,我不明白为什么你的函数在开头有双向返回类型有2向量作为参数,如果这是你想要从输入中得到的。我只能想象作为参数的&#34; filename.dat&#34;最大值。这是实现您喜欢的非常简单的代码:
vector<vector<double> > Cosmic_Ray_Events()
{
ifstream cosmic_ray_data("events.dat");
vector<vector<double> > cosmic_ray;
int columns = 8;
while(cosmic_ray_data.good())
{
vector <double> row_vector;
for(int i=0; i<columns; i++)
{
double data;
cosmic_ray_data >> data;
row_vector.push_back(data);
}
cosmic_ray.push_back(row_vector);
}
cosmic_ray_data.close();
return cosmic_ray;
}
然后你可以使用它的方式:
vector<vector<double> > cosmic_events_vector = Cosmic_Ray_Events();
除此之外,如果那不是你想要的,那就更具体了。