template<class String, class Iter>
String join(Iter const begin, Iter const end, String const& sep) {
String result;
if (begin != end) {
{
Iter i = begin;
int final_size = i->length();
while (++i != end) {
final_size += sep.length() + i->length();
}
result.reserve(final_size);
}
{
Iter i = begin;
result += *i;
++i;
for (; i != end; ++i) {
result += sep;
result += *i;
}
}
}
return result;
}
template<class String, class Iter>
String join(Iter const begin, Iter const end) {
String result;
{
int final_size = 0;
for (Iter i = begin; i != end; ++i) {
final_size += i->length();
}
result.reserve(final_size);
}
for (Iter i = begin; i != end; ++i) {
result += *i;
}
return result;
}