【发布时间】:2014-03-30 01:41:19
【问题描述】:
代码如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
std::vector<unsigned char> bytes;
{
std::ifstream in(name, std::ios_base::binary);
bytes.assign(std::istreambuf_iterator<char>(in >> std::noskipws),
std::istreambuf_iterator<char>());
}
根据参考资料,vector.assign 函数接受两个参数,first 和 last,并将介于两者之间的任何内容放入向量中。 istreambuf_iterator 函数采用这种形式:
istreambuf_iterator( std::basic_istream<CharT,Traits>& is );
istreambuf_iterator( std::basic_streambuf<CharT,Traits>* s );
这些都好理解,但是在上面的sn-p中,第二个迭代器初始化器不带参数,是什么意思?
还要注意bytes的类型是unsigned char,而迭代器的类型是char,这不是不匹配吗?
【问题讨论】:
-
默认构造函数结束流迭代器。见here。
-
还有一个从
char到unsigned char的隐式转换。
标签: c++ io binaryfiles