競技プログラミングで、以下のようにコンテナの中身を改行区切りでSTDINに出力したいとき用。
使用例
std::vector<int> v{1, 2, 3};
std::cout << v << '\n'; // 1\n 2\n 3\n\n
実装例
簡単には以下のようにすれば良い。
#include <iostream>
#include <ranges>
#include <concepts>
#include <string_view>
// range output
template<class T>
requires std::ranges::input_range<T> && (!std::convertible_to<T, std::string_view>)
std::ostream& operator << (std::ostream& cout, const T& v) {
for (const auto& i : v) {
cout << i << '\n';
}
return cout;
}
要素型がstd::ostream
への出力に対応している必要がある点と、std::string
系を別扱いにしないと文字列が1文字づつ分割されてしまう点に注意。
最後に
競プロ向けです。実開発でもデバッグ出力として使えるかもしれませんが、これを使うぐらいならstd::to_string
を使用するかログ機能を自作したほうがいいと思います。