相关疑难解决方法(0)

带有copy_n()和朋友的std :: istream_iterator <>

下面的片段从中读取三个整数std::cin; 它写入两个numbers并丢弃第三个:

std::vector<int> numbers(2);
copy_n(std::istream_iterator<int>(std::cin), 2, numbers.begin());
Run Code Online (Sandbox Code Playgroud)

我希望代码能够准确地读取两个整数std::cin,但事实证明这是一个正确的,符合标准的行为.这是标准中的疏忽吗?这种行为的理由是什么?


从C++ 03标准中的24.5.1/1开始:

在构造之后,每次使用++时,迭代器都会读取并存储一个值T.

所以在上面的代码中,在调用时,流迭代器已经读取了一个整数.从那时起,算法中迭代器的每次读取都是预读,从而产生从先前读取缓存的值.

下一个标准的最新草案n3225似乎没有任何变化(24.6.1/1).

在相关的说明中,参考istream_iterator(istream_type& s)构造函数的当前标准的24.5.1.1/2 读取

效果:初始化in_stream为 s.value可以在施工期间或第一次参考时初始化.

重点是" value 可以初始化......"而不是" 应该初始化".这听起来与24.5.1/1相矛盾,但也许这应该是一个自己的问题.

c++ istream-iterator

26
推荐指数
2
解决办法
2035
查看次数

标签 统计

c++ ×1

istream-iterator ×1