例えば、以下のようなコードですと、
#include
#include
int main()
{
const int x[] = {1, 3, 5, 7, 9};
std::copy(x, x + 5, std::ostream_iterator(std::cout, ","));
return 0;
}
[codeplain]
1,3,5,7,9,
[/code]
最後の「,」が余分に表示されてしまいます。
そこで、以下のようなjoin_tというクラスを考えました。
このクラスのオブジェクトをストリームに出力することで、指定した範囲の値をデリミタで区切って表示してくれます。
以下実装コード
#include
#include
#include
namespace a5ua
{
template
class join_t
{
public:
join_t(InIt first, InIt last, const char *delimiter)
: m_first(first), m_last(last), m_delimiter(delimiter)
{
}
friend std::ostream &operator
join_t join(InIt first, InIt last, const char *delimiter = ",")
{
return join_t(first, last, delimiter);
}
}
// サンプルコード
#include
#include
int main(void)
{
std::vector v;
// 標準入力から整数をいくつか入力
std::copy(std::istream_iterator(std::cin), std::istream_iterator(), std::back_inserter(v));
// デフォルトでは、","区切りで出力
std::cout "区切りで出力
std::cout ") << std::endl;
return 0;
}