joinのようなもの

アバター
a5ua
記事: 199
登録日時: 14年前

joinのようなもの

投稿記事 by a5ua » 14年前

皆さんは、コンテナや配列内の要素を文字で区切って表示するとき、どのようなコードを書きますか?
例えば、以下のようなコードですと、

CODE:

#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というクラスを考えました。
このクラスのオブジェクトをストリームに出力することで、指定した範囲の値をデリミタで区切って表示してくれます。

以下実装コード

CODE:

#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;
}
最後に編集したユーザー a5ua on 2010年10月19日(火) 00:28 [ 編集 1 回目 ]

コメントはまだありません。