デバッグ出力に役立つ ostream_joiner とは

こんにちは.

今日は C++ コンテナの中身を簡単にデバッグ出力できる ostream_joiner を紹介します.

ostream_joiner は experimental/iterator をインクルードすることで, std::experimental::ostream_joiner として使えるようになります.

#include <experimental/iterator>
#include <vector>
#include <iostream>

using namespace std;
using namespace experimental;

ostream_joiner<const char *> debug = make_ostream_joiner(cout, " ");

int main(){
	vector<int> v = {1, 2, 3, 4, 5};

	copy(v.begin(), v.end(), debug);
	cout << endl;
}

これで

1 2 3 4 5

と出力されます. make_ostream_joiner の第 2 引数で " " の代わりに ", " を指定すればカンマ区切りになります(最後の要素の後にカンマは入りません).

set とかもいけます.

	set<int> s;
	s.insert(5);
	s.insert(2);
	s.insert(3);
	s.insert(1);
	s.insert(4);

	copy(v.begin(), v.end(), debug);
	cout << endl;

出力は同じく

1 2 3 4 5

です.

わりと便利そう.