あれ?joinなくね?

C++ってjoinないんじゃない?あるの?というわけで、あるのかどうかよく知らないけど、テンプレートを思い出すために作った。


/* イテレータ::value_typeでイテレータが示す要素の型を取れる。
 * ただし、typenameをつけておかないとコンパイラに「なんのこっちゃ?」って怒られる。
 */
template< typename InIt >
typename InIt::value_type join(InIt begin, InIt end, typename InIt::value_type sep)
{
	typename InIt::value_type result;

	for (InIt it = begin; it < end; it++) {
		result += *it;
		if (it + 1 < end) result += sep;
	}
	return result;
}

int main(int argc, char* argv[])
{
	std::vector<std::string> a;
	a.push_back("abc");
	a.push_back("def");
	a.push_back("ghi");

	std::string a_joined(join(a.begin(), a.end(), ":"));
	std::cout << a_joined << std::endl;

	std::vector<std::wstring> b;
	b.push_back(L"abc");
	b.push_back(L"def");
	b.push_back(L"ghi");

	std::wstring b_joined(join(b.begin(), b.end(), std::wstring(L":")));
	std::wcout << b_joined << std::endl;

	return 0;
}

abc:def:ghi
abc:def:ghi

こんなんでいいのかしら?まあ、上記レベルでは使えたからいいや。
そんなことよりwstringってwcoutで表示できるのかー。

以上

2008-10-17 : 修正
value_typeを使うようにした。

コスミー について

昔(?)はゲーム作ってました。 今もなんか作ろうとしています。
カテゴリー: C++ パーマリンク

コメントを残す

メールアドレスが公開されることはありません。