2011-05-29

c++のコンテナをストリームに出力するコードスニペット

どういうことがしたいかというと、

for (vector<string>::iterator it = lis.begin(); it != lis.end(); ++it) {
  cout << *it << endl;
}

のようなループをかくのが面倒なので

cout << lis << endl;

のように書きたい。

これをやるにはtemplateパラメータにtemplateをつかってoperator<<をオーバーロードしてやればまあまあ簡単にかける。


forward_iteratorを実装してるコンテナならなんでもいけるはず。ネストしててもOK

テンプレートパラメータが3つのコンテナ用の定義でlessとgreaterに分けてるのは、コンパイラに型推論をうまくやってもらうため。(テンプレートパラメータだけではstringの型と見分けがつかないので)


2011-06-04追記
古いコンパイラだとコンパイルできないかも

ZenBackWidget