using std::setprecision;
using std::ostream;
using std::istream;
-using std::ostream_iterator;
-using std::istream_iterator;
using std::ios;
#include <limits>
template <class C>
inline typename enable_if<is_const_iterable<C>::value, string>::type
implode(const C & v, string delim=" ") {
- if (v.begin() == v.end())
+ auto i=v.cbegin(), end=v.cend();
+ if (i == end)
return string();
ostringstream oss;
- auto last = prev(v.end());
- copy(v.begin(), last, ostream_iterator<typename C::value_type>(oss, delim.c_str()));
- oss << *last;
+ oss << *i++;
+ while (i != end)
+ oss << delim << *i++;
return oss.str();
}
size_t start = 0, end = 0;
while ((end = s.find(delim, start)) != string::npos) {
out.push_back(s.substr(start, end - start));
- start = end + 1;
+ start = end + delim.size();
}
out.push_back(s.substr(start));
return out;