c++ - istream_iterators 之间的距离

标签 c++ distance istream-iterator

我正在尝试通过使用 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::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) );

关于c++ - istream_iterators 之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16373420/

相关文章:

c++ - istream_iterator 的初始化导致 ifstream.fail() 被设置

c++ - Node.js 和 C/C++ 集成 : how to properly implement callbacks?

c++ - 使用时间单位模板返回 chrono::duration 的函数

python - 为什么 cv2.NORM_HAMMING 给出的值与实际汉明距离不同?

python - 在 python 中使用 scipy.spatial.distance.cdist(X, Y) 查找一组点之间的距离

c++ - 如何使用 istream_iterator 从 ifstream 读取带空格的字符串?

c++ - istream_iterator 内存泄漏

c++ - 字符串函数

c++ - 在 C++/OpenGL 中加载 tga/bmp 文件

r - 2 个样本之间的 Kullback-Leibler 距离