从函数中的dat文件创建二维数组

时间:2017-04-24 16:02:48

标签: c++ arrays

所以我试图创建一个从打开的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();

}

1 个答案:

答案 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();

除此之外,如果那不是你想要的,那就更具体了。