gpt4 book ai didi

c++ - 为什么 istreambuf_iterator 提前工作

转载 作者:太空狗 更新时间:2023-10-29 23:33:36 28 4
gpt4 key购买 nike

我正在阅读 Constructing a vector with istream_iterators这是关于将完整的文件内容读入字符 vector 。虽然我希望将文件的一部分加载到字符 vector 中。

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char *argv[])
{
ifstream ifs(argv[1], ios::binary);
istreambuf_iterator<char> beginItr(ifs);
istreambuf_iterator<char> endItr(beginItr);
advance(endItr, 4);
vector<char> data(beginItr, endItr);
for_each(data.cbegin(), data.cend(), [](char ch)
{
cout << ch << endl;
});
}

这不起作用,因为 advance 不起作用,而上述问题的公认答案有效。为什么 advance 在 istreambuf_iterator 上不起作用?

还有

  endItr++;
endItr++;
endItr++;
endItr++;
cout << distance(beginItr, endItr) << endl;

返回 0。请有人解释这是怎么回事!

最佳答案

Why doesn't the advance work on istreambuf_iterator?

它有效。它推进迭代器。问题是 istreambuf_iterator 是一个输入迭代器 但不是一个前向迭代器,这意味着它是一个单遍迭代器:一旦你推进它,您再也无法访问以前的状态。要执行您想要的操作,您可以简单地使用计数为 4 的老式 for 循环。

关于c++ - 为什么 istreambuf_iterator 提前工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245809/

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