istream_iterator之间的距离

Distance between istream_iterators

本文关键字:距离 之间 iterator istream      更新时间:2023-10-16

我试图通过使用std::distance提前为向量的构造函数参数来计算std::cin读取的元素数量,如下所示:

// 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::istream_iteratorInputIterator,这意味着它只支持在迭代的范围内进行一次传递。没有办法计算出大小,然后返回开始读取数据。

您可以使用std::copystd::cin(或任何其他输入流)读取,而无需事先知道大小,只需使用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) );