4

我试图通过预先使用向量的构造函数参数来计算读取的元素数量std::cinstd::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不影响流的情况下使用任意输入的大小。有任何想法吗?

4

1 回答 1

7

std::istream_iteratorInputIterator,这意味着它仅支持在您正在迭代的范围内单次通过。没办法算出大小,然后回到开头读取数据。

您可以在事先不知道大小的情况下从std::cin(或任何其他输入流)读取,只需将正在读取的数据附加到.std::copystd::back_insertervector

std::vector v;
std::copy( std::istream_iterator<std::string>(std::cin), 
           std::istream_iterator<std::string>(),
           std::back_inserter(v) );
于 2013-05-04T10:51:02.723 回答