我试图通过事先使用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
获取任意输入的大小而不影响流。有什么想法吗?
答案 0 :(得分:6)
std::istream_iterator
是InputIterator
,这意味着它只支持您正在迭代的范围内的单次传递。没有办法弄清楚大小,然后回到开头读取数据。
您可以使用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) );