C++ 将二进制文件读取到“时,模板参数是什么?”;“无符号字符”;矢量

C++ 将二进制文件读取到“时,模板参数是什么?”;“无符号字符”;矢量,c++,vector,unsigned-char,istream-iterator,C++,Vector,Unsigned Char,Istream Iterator,这个代码怎么了 std::vector<unsigned char> newVector; std::ifstream inFile(fullPath.c_str(), std::ios::in|std::ios::binary); std::istreambuf_iterator iterator(inFile); 如果我把它改成这个: std::istreambuf_iterator<unsigned char> iterator(inFile); std::is

这个代码怎么了

std::vector<unsigned char> newVector;
std::ifstream inFile(fullPath.c_str(), std::ios::in|std::ios::binary);
std::istreambuf_iterator iterator(inFile);
如果我把它改成这个:

std::istreambuf_iterator<unsigned char> iterator(inFile);
std::istreambuf_迭代器迭代器(infle);
它抱怨说:

invalid conversion from 'void*' to 
    'std::istreambuf_iterator<unsigned char>::streambuf_type
从“void*”到的转换无效
'std::istreambuf_迭代器::streambuf_类型

ifstream
是一个
basic\u ifstream
,而不是
basic\u ifstream
。因此,您需要将迭代器声明为

std::istreambuf_iterator<char> iterator(inFile);
std::istreambuf_迭代器迭代器(infle);

它会起作用。

我是否正在将二进制文件读取到“unsigned char”向量并不重要?@MikaelS.:不,没问题。例如,您可以执行
newVector.insert(newVector.begin(),迭代器,eos)
其中
eos
是默认的初始化(流结束)
istreambuf\u迭代器
。重要的是向量元素类型(
unsignedchar
)可以从迭代器元素类型(
char
)构造。
std::istreambuf_iterator<char> iterator(inFile);