6
下面的代碼不像我所期望的那樣運行。請幫我理解它是如何工作的。ifstream的複製算法
#include <algorithm>
#include <iterator>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
struct user
{
string name;
string age;
string id;
};
istream& operator>>(istream& is, user& s)
{
getline(is, s.name, ':');
getline(is, s.age, ':');
getline(is, s.id);
return is;
}
int main(int argc, char* argv[])
{
ifstream file("file.txt");
vector<user> vec;
copy(istream_iterator<user>(file), istream_iterator<user>(), back_inserter(vec));
return 0;
}
我的運營商定製>>被稱爲兩次,但我希望它被稱爲只有一次,因爲內容是:
約翰:40:21-5821-0
你怎麼知道它被調用兩次?檢查調試器?你在矢量中得到兩個條目?如果最後一個,兩個條目是相同的? – 2012-03-30 22:49:35
+1,最近出現了同樣的問題......由於某種原因,copy代碼中的迭代器增量導致了讀取,而不是取消引用,因此它執行的讀取次數太多。也就是說,您的'operator >>'需要在前兩個'getline'操作後檢查狀態! – 2012-03-30 22:50:30
無需擔心不檢查返回值的I/O代碼。您必須*總是*檢查I/O操作的返回值。 – 2012-03-30 23:00:08