istream_iterators之间的距离(Distance between istream_it

2019-09-01 23:50发布

我想,以计算读取的元素量std::cin使用std::distance提前为载体的构造函数的参数,就像这样:

// 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不影响流。 有任何想法吗?

Answer 1:

std::istream_iteratorInputIterator ,这意味着它仅支持在你迭代范围内的单程。 有没有办法找出大小,然后回到开始来读取数据。

可以从读出std::cin使用(或任何其他输入流) std::copy不知道大小预先,只是使用std::back_inserter追加被读取到数据vector

std::vector v;
std::copy( std::istream_iterator<std::string>(std::cin), 
           std::istream_iterator<std::string>(),
           std::back_inserter(v) );


文章来源: Distance between istream_iterators