Обратите внимание на typedef в коде:
typedef std::istream_iterator<int> in;
Таким образом, in(...)
совпадает с std::istream_iterator<int>(...)
: он вызывает конструктор для этого типа. Существует конструктор с 1 аргументом, который принимает std::istream
, создавая итератор, который представляет текущую точку в этом потоке; и конструктор с 0 аргументами, создающий итератор, который представляет конец любого данного потока. Таким образом, std::for_each
будет перебирать каждое значение, предоставленное std::cin
с этого момента, пока не закончится.
std::istream_iterator<int>
принимает поток и предоставляет итератор для int
s в потоке, используя operator>>
для чтения их из потока.
Однако я не смог найти никакой документации по C ++, которая бы объясняла это подробно.
Я не знаю, как ты мог потерпеть неудачу. Я добавил std::istream_iterator<int>
в Google, и первый результат был http://www.sgi.com/tech/stl/istream_iterator.html, что довольно основательно, если вы уже знакомы с итераторами. Следующий результат - http://www.cplusplus.com/reference/std/iterator/istream_iterator/, который делает еще одну попытку объяснить вещи, а также полностью детализирован. Затем следует http://stdcxx.apache.org/doc/stdlibref/istream-iterator.html, аналогично, который в конечном итоге явно упоминает operator>>
вместо того, чтобы просто говорить о форматированных операциях ввода / вывода (что и делает operator>>
). Далее идет страница с некоторыми примерами фрагментов C ++, затем пара вопросов StackOverflow, где люди пытались сделать что-то подобное и т. Д. ...