【问题标题】:Why do successive istream_iter objects increment the iterated stream?为什么连续的 istream_iter 对象会增加迭代流?
【发布时间】:2020-04-22 02:45:50
【问题描述】:

为什么下面的代码会输出c

// main.cpp
#include <iostream>
#include <sstream>
#include <iterator>

int main( int argc, char* argv[] )
{
  std::string p( "abcdefghijklmnopqrstuvwxyz" );
  std::stringstream ss(p);
  std::istream_iterator<char> i( ss );
  std::istream_iterator<char> j( ss );
  std::istream_iterator<char> k( ss );
  std::cout << *k << std::endl;

  return 0;
}

.

$ g++ --version
g++ (GCC) 9.2.1 20190827 (Red Hat 9.2.1-1)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ -g ./main.cpp && ./a.out
c

这有点像每个连续的istream_iterator 实例都隐含地将“内部事物”迭代到stringstream。为什么不是每个istream_iterator 实例都从其istream_type 的开头开始?

【问题讨论】:

    标签: c++ stringstream istream-iterator


    【解决方案1】:

    是的,constructor of istream_iterator 执行读取,ijk 使用相同的流,因此它们是交互的。

    (强调我的)

    3) 初始化迭代器,将流的地址存储在数据中 成员,并从输入流中执行第一次读取以 初始化缓存值数据成员

    【讨论】:

    • 哦...从流中读取自动“增量”到流中的下一个“元素”,对吗?
    • @StoneThrow 是的,所以如果您再次执行读取,您将获得下一个值,这是预期的行为。而ijk 使用相同的流,因此它们是交互的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 2020-07-23
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2020-10-22
    相关资源
    最近更新 更多