我具有以下形式的简单功能:
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
中,则每次调用该函数时,都必须打开文件,创建数组...等等。我想通过在第一次或第一次调用函数时定义数组来避免这种情况。我该怎么办?
我知道,如果我在主作用域中定义数组并将其作为参数传递给函数,则可以解决此问题,但是我想保持主作用域尽可能整洁。谢谢!
答案 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
}