gpt4 book ai didi

c++ - 文件istream迭代器理解

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:45:00 24 4
gpt4 key购买 nike

我可能对 istream_iterator 或一般的迭代器缺乏一些了解,但这两个代码片段不应该产生相同的结果吗?

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;
}

什么都不输出。

最佳答案

输入流迭代器是单遍迭代器,这意味着一旦它们被递增,就无法获得其先前的值。当递增 std::istream_iterator<T>它将一个值提取到 T() 中对象并返回结果。因此,该值将被丢弃并且无法重新获得。

您要做的是将每个读数存储到一个 vector 中,然后打印出来。您也可以使用 std::ostream_iterator :

std::ostream_iterator<char> out(std::cout);
Itf ef(file);

out = ++ef;
out = ++ef;
out = ++ef;

这也是等价的:

std::copy(ef, Itf(), out);

关于c++ - 文件istream迭代器理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com