簡體   English   中英

如何在C ++中兩次在ifstream上使用迭代器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM