在循环判断文件是否结束时可以直接把输入流放在循环条件,但是这里补充使用eof()的一些细节问题。这是关于到底什么时候标志位才会变化的问题。
ifstream fin("/home/daibo/桌面/evo工具/groundtruth.txt");
fin.eof();
fin.eof()判断不合常理,按照正常逻辑,如果到了文件末尾 ,那fin.eof()应返回真。C++输入流ifstream如何知道是否已经到达文件末尾,原来它根据的是: 如果fin不能再读入数据,才发现已经到达文件结尾,这时才给流设定文件结尾的标志,此后调用eof(),才返回真。
vector<vector<double>> vecs;
for (int i = 0;; i++)
{
if (fin.eof())
{
cout << "read over " << endl;
break;
}
vector<double> vec(8,0); //获取每行数据
for (auto & d : vec)
{
fin >> d;//双向影响
}
vecs.push_back(vec);
}
我们会发现vecs读取groundtruth.txt时多读取了一行数据,多出的这行数据是初始化的vector vec(8,0),修改上述的程序如下,避免出现多出一行数据。
vector<vector<double>> vecs;
for (int i = 0;; i++)
{
vector<double> vec(8,0); //获取每行数据
for (auto & d : vec)
{
fin >> d;//双向影响
}
if (fin.eof())
{
cout << "read over " << endl;
break;
}
vecs.push_back(vec);
}
转载自链接: 明镜止水.