istream の内容を vector にコピーする

ifstreamからバイト列を読み込みvectorに代入するときの方法です。
よく「アレ?どう書くんだっけ?」と忘れるので、メモしときます。

(a) 

// ifstream fi;
istreambuf_iterator<char> begin(fi);
istreambuf_iterator<char> end;
vector<char> data(begin, end);

 
(b)1行で書くとき

vector<char> data((istreambuf_iterator<char>(fi)), (istreambuf_iterator<char>()));

 
(c)関数にするなら

void Copy(std::istream strm, std::vector<char> &output)
{
  output.assign((istreambuf_iterator<char>(strm)), (istreambuf_iterator<char>()));
}

b,cの1番目の引数(istreambuf_iterator(fi))の外側の括弧はなくてもOKです。