【发布时间】:2014-04-09 20:58:29
【问题描述】:
我可能对 istream_iterator 或一般的迭代器缺乏一些了解,但是这两个代码 sn-ps 不应该产生相同的结果吗?
typedef vector<int>::iterator Itv;
vector<int> vec = {1,2,3,4,5,6,7,8,9};
Itv ev = vec.begin();
++ev;
++ev;
++ev;
for (Itv it = vec.begin(); it != ev; ++it){
cout << *it;
}
输出:123
//data.txt contains: 1,2,3,4,5,6,7,8,9
typedef istream_iterator<char> Itf;
fstream file("data.txt");
Itf ef(file);
++ef;
++ef;
++ef;
for (Itf it(file); it != ef; ++it){
cout << *it;
}
什么都不输出。
【问题讨论】:
-
Itf it(file)与从流的开头开始不同。前一个迭代器读取将文件流位置向前移动。 -
旁注:有一个函数
std::advance用于多次递增迭代器。
标签: c++ iterator istream-iterator