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を使うようにした。