我是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) {...}
答案 0 :(得分:3)
istreambuf_iterator
是一个输入迭代器,一旦递增,其先前值的所有副本都可能无效,而不是在多遍算法中使用时保证有效性的前向迭代器。有关迭代器类别的更多信息,请参阅here。