以下是代码:
#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 );
这些都很容易理解,但是在上面的代码片段中,第二个迭代器初始化器没有参数,它是什么意思?
另请注意bytes
的类型为unsigned char
,而迭代器的类型为char
,这不是不匹配吗?
答案 0 :(得分:3)
第二个迭代器初始化器没有参数,它是什么意思?
这意味着它被初始化为流末端迭代器。
另请注意
bytes
的类型为unsigned int
,而迭代器的类型为char
,这不是不匹配吗?
你的意思是unsigned char
对吧? (这就是它在你的代码中所说的内容。)
没关系,因为unsigned char
可以从char
构建和分配。采用迭代器范围的模板化函数通常不要求类型完全匹配。 (有关精确要求,请参阅标准§23.2.3中的表100。)