c++ - 如何从 range-v3 的 istream_range 中检索文件大小?

标签 c++ istream-iterator range-v3

我正在尝试从 range-v3 中获取文件大小值,就像这样。

std::ifstream i("test.bin", std::ios::binary | std::ios::in);
auto rng = ranges::istream_range<unsigned char>(i);
std::cout << ranges::distance(rng);

然而,距离函数似乎返回了错误的大小。为什么?

godbolt.org/g/DsouJE

最佳答案

istream_range 使用 operator>> 来读取元素。 operator>>是一个格式化的输入运算符,它会跳过空格,可能会转换行尾等。这就是你得到错误结果的原因。

即使这种方法可以给出正确的结果,但效率很低。它读取整个文件。

关于c++ - 如何从 range-v3 的 istream_range 中检索文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50087511/

相关文章:

c++ - 查找bad_alloc原因的调试策略

c++ - 在 Visual C++ 2010 中执行前先执行 bat 脚本

c++ - 我们能够在 C++20 中构造带有 View 的容器吗?

c++ - 断点陷阱是否总是意味着程序是从调试器运行的?

c++ - Opencv:如何计算 3d 直方图?

c++ - 将 std::ifstream 读取到行 vector 后,某些字节丢失

c++ - constexpr end istream (sentinel) 迭代器有什么意义?

c++ - istream_iterator 和惰性求值

c++ - 为什么 views::reverse 可以将 non-sized_range 转换为 size_range?

c++ - 为什么 `iota(0) | take(0)` 不是 C++20 中的模型 range::sized_range?