std :: istreambuf_iterator <char>初始化时没有参数?</char>

时间:2014-02-26 22:24:11

标签: c++ io binaryfiles

以下是代码:

#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函数接受两个参数firstlast,并将两者之间的任何内容放入向量中。 istreambuf_iterator函数采用以下形式:

istreambuf_iterator( std::basic_istream<CharT,Traits>& is );    
istreambuf_iterator( std::basic_streambuf<CharT,Traits>* s );

这些都很容易理解,但是在上面的代码片段中,第二个迭代器初始化器没有参数,它是什么意思?

另请注意bytes的类型为unsigned char,而迭代器的类型为char,这不是不匹配吗?

1 个答案:

答案 0 :(得分:3)

  

第二个迭代器初始化器没有参数,它是什么意思?

这意味着它被初始化为流末端迭代器。

  

另请注意bytes的类型为unsigned int,而迭代器的类型为char,这不是不匹配吗?

你的意思是unsigned char对吧? (这就是它在你的代码中所说的内容。)

没关系,因为unsigned char可以从char构建和分配。采用迭代器范围的模板化函数通常不要求类型完全匹配。 (有关精确要求,请参阅标准§23.2.3中的表100。)