C++ 将数组从txt文件传递给函数
我有一个简单的函数形式:C++ 将数组从txt文件传递给函数,c++,arrays,function,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++;
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
,每次调用函数时,它都必须打开文件,创建数组。。。等等我希望通过在第一次调用函数时或之前定义数组来避免这种情况。我该怎么做
我知道如果我在主作用域中定义数组并将其作为参数传递给函数,我可以解决这个问题,但我希望尽可能保持主作用域干净。谢谢 您的
f
函数采用1(一)个值,而不是数组
如果要传递数据,则需要使用std::vector
而不是数组
您的循环应该是:
double value1, value2;
std::vector<double> a;
std::vector<double> b;
while (inFile >> value1 >> value2)
{
a.push_back(value1);
b.push_back(value2);
}
编辑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);
}
}
void input_数据(std::istream&input,std::vector&a,std::vector&b)
{
双重价值1,价值2;
同时(输入>>值1>>值2)
{
a、 推回(值1);
b、 推回(值2);
}
}
让我们创建一个实例来读取您的数据
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;
};
将您的函数包装在一个类中,并在其中使用一个单例来获取所需的数据。除了一个bug:
while(!infle.eof()){
你为什么要数线?!完全浪费了电子。我猜OP不能使用std::vector。这一点也不清楚,因为没有使用线计数,我们不知道a
和b
在哪里声明或分配。@drescherjm不能使用vector,但可以使用seekg?一个白痴教授发现了。我不认为这是什么OP需要。a
和b
是在f
内部读取的,而不是外部读取的。基本上,函数使用文件中的一组参数,OP不希望每次调用函数时都加载这些参数。这给了OP一些工具来使用。我不喜欢给出100%的解决方案,我喜欢让海报思考。另外,OP也不希望每次调用函数时都加载这些参数e是一种设计气味,OP应该使用一个对记录建模的类,而不是使用并行容器。这就是我需要的。谢谢!我一直在测试你的想法,但我无法让它发挥作用。我尝试了基于同一想法的不同变体,但使用你发布的内容,我得到了错误:'DataHolder'没有引用值auto&d=DataHolder.getInstance();
Oops,对不起,它是::
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
}