我正在尝试通过使用 std::distance
作为 vector 的构造函数参数来计算 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
一步完成,但这需要事先设置一个大小。我的问题不是关于 vector ,而是关于使用 std::istream_iterator
获取任意输入的大小而不影响流。有什么想法吗?
最佳答案
std::istream_iterator
是一个 InputIterator
,这意味着它只支持在您迭代的范围内进行单次传递。没办法先算出大小,再回到开头读取数据。
您可以使用 std::copy
从 std::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) );
关于c++ - istream_iterators 之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16373420/