我发现的只是boost::algorithm::string::join
.但是,将Boost仅用于加入似乎有点过分.那么也许有一些经过时间考验的食谱?
更新:
对不起,问题标题很糟糕.我正在寻找使用分隔符连接字符串的方法,而不仅仅是逐个连接.
Rob*_*edy 13
由于您正在寻找食谱,请继续使用Boost中的食谱.一旦你超越了所有的通用性,它就不会太复杂:
这是一个适用于两个迭代器的版本(与Boost版本相反,它在一个范围上运行.
template <typename Iter>
std::string join(Iter begin, Iter end, std::string const& separator)
{
std::ostringstream result;
if (begin != end)
result << *begin++;
while (begin != end)
result << separator << *begin++;
return result.str();
}
Run Code Online (Sandbox Code Playgroud)
Bjö*_*lex 12
如果你真的想要''.join()
,你可以使用std::copy
a std::ostream_iterator
to a std::stringstream
.
#include <algorithm> // for std::copy
#include <iterator> // for std::ostream_iterator
std::vector<int> values(); // initialize these
std::stringstream buffer;
std::copy(values.begin(), values.end(), std::ostream_iterator<int>(buffer));
Run Code Online (Sandbox Code Playgroud)
这将插入所有值buffer
.您也可以指定一个自定义分隔符,std::ostream_iterator
但最后会附加(这是重要的区别join
).如果你不想要一个分隔符,这将完成你想要的.
小智 8
简单地说,容器中的类型是一个int:
std::string s = std::accumulate(++v.begin(), v.end(), std::to_string(v[0]),
[](const std::string& a, int b){
return a + ", " + std::to_string(b);
});
Run Code Online (Sandbox Code Playgroud)