[英]How do I use an iterator on an ifstream twice in C++?
我是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
是一個輸入迭代器,一旦遞增,其先前值的所有副本都可能無效,而不是在多遍算法中使用時保證有效性的前向迭代器。 有關迭代器類別的更多信息,請參見此處 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.