我如何在C 中两次使用ifstream上的迭代器

How do I use an iterator on an ifstream twice in C++?

本文关键字:两次 ifstream 迭代器      更新时间:2023-10-16

我是C 的新手,我对将迭代器与ifstream一起使用。在以下代码中,我有一个称为datafile的ifstream变量。

在代码中,我首先通过文件迭代,以计算其具有多少个字符(是否有更有效的方法可以执行此操作?)。然后,我创建一个大小的矩阵,然后再次迭代以填充矩阵。

问题在于迭代器拒绝第二次迭代,并且不会做任何事情。我尝试通过使用datafile.clear()从一开始重置ifstream,但这可能没有用,可能是因为我对迭代剂有深深的误解。有人可以帮我吗?

typedef istreambuf_iterator<char> dataIterator;
for (dataIterator counter(dataFile), end; counter != end; ++counter, ++numCodons) {} // Finds file size in characters.
MatrixXd YMatrix = MatrixXd::Constant(3, numCodons, 0);
dataFile.clear(); // Resets the ifstream to be used again.
for (dataIterator counter(dataFile), end; counter != end; ++counter) {...}

istreambuf_iterator是一个输入迭代器,一旦被递增,其上一个值的所有副本都可能无效,而不是向前迭代器,它可以保证在多通算法中使用时有效性。有关迭代器类别的更多信息,请参见此处。