DOSEIの日記

技術メモ+日常ログ

ostream_iterator

ある vector 要素をアルゴリズムを使ってストリームに適用させたいときがある。例えば、自分で作った型 Vec (vector と紛らわしいな)があって、これは std::ostream& operator<<(std::ostream& stream, Vec v) を持っている。このとき vector<Vec> a を全部表示したい。

方法 1 (for)

for(size_t i=0; i<a.size(); ++i)
{
  std::cout << a[i] << std::endl;
}

方法 2 (for_each)

void Print(Vec a)
{
  std::cout << a << std::endl;
}

std::for_each(a.begin(), a.end(), Print());

方法 3 (ostream_iterator)

std::copy(a.begin(), a.end(), std::ostream_iterator<Vec>(std::cout, "\n"));