Другой альтернативой является использование std::copy
и класса ostream_iterator
:
#include <iterator> // ostream_iterator
#include <sstream> // ostringstream
#include <algorithm> // copy
std::ostringstream stream;
std::copy(array.begin(), array.end(), std::ostream_iterator<>(stream));
std::string s=stream.str();
s.erase(s.length()-1);
Также не так хорош, как Python.
Для этого я создал функцию join
:
template <class T, class A>
T join(const A &begin, const A &end, const T &t)
{
T result;
for (A it=begin;
it!=end;
it++)
{
if (!result.empty())
result.append(t);
result.append(*it);
}
return result;
}
Затем использовал это так:
std::string s=join(array.begin(), array.end(), std::string(","));
Вы можете спросить, почему я передал итераторы. Ну, на самом деле я хотел перевернуть массив, поэтому я использовал его так:
std::string s=join(array.rbegin(), array.rend(), std::string(","));
В идеале, я бы хотел создать шаблон, чтобы он мог выводить тип символа и использовать строковые потоки, но я пока не мог понять это.