C++ 将多个迭代器推进到同一个字符串流中

C++ 将多个迭代器推进到同一个字符串流中,c++,io,stream,iterator,C++,Io,Stream,Iterator,请查看此代码段 std::IStringStreams(“abc”); std::istreambuf_迭代器i1(s),i2(s); 标准::cout来自: std::istreambuf_迭代器是一个单遍输入迭代器,它从为其构造的std::basic_streambuf对象中读取连续字符 这里最重要的部分是单程特性:一旦读取了一个值,就不能返回并再次读取它。回想一下,您可以对std::cin使用std::istreambuf\u迭代器。如果您在程序中读取std::cin,这意味着您可能会以交

请查看此代码段

std::IStringStreams(“abc”);
std::istreambuf_迭代器i1(s),i2(s);
标准::cout来自:

std::istreambuf_迭代器
是一个单遍输入迭代器,它从为其构造的
std::basic_streambuf
对象中读取连续字符

这里最重要的部分是单程特性:一旦读取了一个值,就不能返回并再次读取它。回想一下,您可以对
std::cin
使用
std::istreambuf\u迭代器。如果您在程序中读取
std::cin
,这意味着您可能会以交互方式键入字符-无法返回(您必须将字节保存在
std::string
或类似文件中才能实现)

现在,当创建引用相同流对象的多个迭代器时,前进一个迭代器意味着读取所有迭代器都可以看到的字符。这是由于迭代器的单程性质所致,另请参见以下文档:

通过调用sbuf_u->sgetc()读取单个字符,其中sbuf_u是指向流缓冲区的存储指针


显然,所有迭代器实例都共享解引用运算符使用的状态。

您期望得到什么?此外,代码中的注释意味着您第二次得到了“b a”,但您的输出有“b b”,并且缺少您输出的其他字符串。请附上您提供的代码片段的实际输出
a
a

b
b

c
c