более быстрый вариант:
vector<string> x = {"1", "2", "3"};
string res;
res.reserve(16);
std::accumulate(std::begin(x), std::end(x), 0,
[&res](int &, string &s)
{
if (!res.empty())
{
res.append(",");
}
res.append(s);
return 0;
});
он не создает промежуточные строки, а просто выделяет память один раз для всего результата строки и добавляет каждый элемент в конец & res