istream_iterators之间的距离

时间:2013-05-04 10:44:34

标签: c++ distance istream-iterator

我试图通过事先使用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获取任意输入的大小而不影响流。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

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) );