将数组从txt文件传递给函数

时间:2018-11-21 18:03:06

标签: c++ arrays function

我具有以下形式的简单功能:

double f(double x)
{
...
}

对于该功能,我想使用txt文件中的数据,并将其传递给数组:

ifstream inFile;

    inFile.open("data.txt");


    //Counting lines
    string s;
    int nlines=0;

    while(!inFile.eof()){
        getline(inFile, s);
        nlines++;
    }

    inFile.seekg(0, ios::beg);

    while(!inFile.eof()){
        inFile >> a[entry_data];
        inFile >> b[entry_data++]; 
    }

    inFile.close();

如果我将此代码放在函数f中,则每次调用该函数时,都必须打开文件,创建数组...等等。我想通过在第一次或第一次调用函数时定义数组来避免这种情况。我该怎么办?

我知道,如果我在主作用域中定义数组并将其作为参数传递给函数,则可以解决此问题,但是我想保持主作用域尽可能整洁。谢谢!

2 个答案:

答案 0 :(得分:0)

您的f函数采用1(一个)值,而不是数组。

如果要传递数据,则要使用std::vector<double>而不是数组。

您的循环应为:

double value1, value2;
std::vector<double> a;
std::vector<double> b;
while (inFile >> value1 >> value2)
{
   a.push_back(value1);
   b.push_back(value2);
}

您可以使用f函数:

const size_t size = a.size();
for (size_t index = 0; index < size; ++size)
{
  double result = f(a[index]);
  //...
}

编辑1:要加载的功能
您可以创建一个输入函数并在main中调用它一次:

void input_data(std::istream& input, std::vector<double>& a, std::vector<double>& b)
{
  double value1, value2;
  while (input >> value1 >> value2)
  {
     a.push_back(value1);
     b.push_back(value2);
  }
}

答案 1 :(得分:0)

让我们创建一个实例来读取您的数据。

class DataHolder
{
    DataHolder()
    {
    ifstream inFile;

    inFile.open("data.txt");

    double v1, v2;

    while(inFile >> v1 >> v2){
        a.push_back(v1); 
        b.push_back(v2);
    }
    }
public:
    static DataHolder& getInstance()
    {
        static DataHolder d;
        return d;
    }
    std::vector<double> a, b;
};

然后在您的函数中,使用数据保存器:

double f(double x)
{
    auto& d = DataHolder::getInstance();
    // use the holders data
}