Я пытаюсь подсчитать количество элементов, прочитанных std::cin
с помощью std::distance
для аргумента конструктора вектора заранее, например, так:Расстояние между istream_iterators
// Gives correct amount, but now can't use to put into vector
int size = std::distance(std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>());
std::vector v(size);
// Already read from stream
std::copy(...);
Очевидно, что я могу закончить это в один шаг с std::copy
, но для этого потребуется установка размера заранее. Однако мой вопрос касается не векторов, а порядка получения произвольного ввода с использованием std::istream_iterator
без влияния на поток. Есть идеи?
* «Очевидно, что я могу завершить это за один шаг с помощью std :: copy, но для этого потребуется установка размера заранее» * Да и нет, соответственно. Вы знаете о 'back_insert_iterator'? – jrok
Даже если я согласен с преторианским ответом, это очень странное поведение с размером == 0. Как указано в этом документе [http://www.oopweb.com/CPP/Documents/STL/Volume/prw421. htm). Для входных итераторов r и s, r == s не подразумевает ++ r == ++ s: –