Поскольку я люблю однострочники (они очень полезны для всех странных вещей, как вы увидите в конце), вот решение, использующее std :: аккумулят и C ++ 11 lambda:
std::accumulate(alist.begin(), alist.end(), std::string(),
[](const std::string& a, const std::string& b) -> std::string {
return a + (a.length() > 0 ? "," : "") + b;
} )
Я нахожу этот синтаксис полезным для оператора потока, где я не хочу выводить все виды странной логики из области действия потока, просто для простого объединения строк.Рассмотрим, например, этот оператор возврата из метода, который форматирует строку с помощью потоковых операторов (используя std;):
return (dynamic_cast<ostringstream&>(ostringstream()
<< "List content: " << endl
<< std::accumulate(alist.begin(), alist.end(), std::string(),
[](const std::string& a, const std::string& b) -> std::string {
return a + (a.length() > 0 ? "," : "") + b;
} ) << endl
<< "Maybe some more stuff" << endl
)).str();