我记得曾经见过一种使用迭代器将整个二进制文件读入 vector 的巧妙方法。它看起来像这样:
#include <fstream>
#include <ios>
#include <iostream>
#include <vector>
using namespace std;
int main() {
ifstream source("myfile.dat", ios::in | ios::binary);
vector<char> data(istream_iterator(source), ???);
// do stuff with data
return 0;
}
这个想法是通过传递指定整个流的输入迭代器来使用 vector
的迭代器范围构造函数。问题是我不确定要为 end 迭代器传递什么。
如何为文件末尾创建 istream_iterator
?我是不是完全记错了这个成语?
最佳答案
你想要 std::istreambuf_iterator<>
, 用于原始输入。 std::istream_iterator<>
用于格式化输入。至于文件的结尾,使用流迭代器的默认构造函数。
std::ifstream source("myfile.dat", std::ios::binary);
std::vector<char> data((std::istreambuf_iterator<char>(source)),
std::istreambuf_iterator<char>());
编辑以满足C++'s most vexing parse .谢谢,@UncleBens。
关于c++ - 使用 istream_iterators 构造 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423361/