我有以下清单:
vector<string> mylist;
Run Code Online (Sandbox Code Playgroud)
我想创建一个新字符串,其中 mylist 中的所有字符串都用逗号分隔,多年来我一直在编写丑陋的代码来检查我是否在向量中的最后一个字符串中,以了解是否应该添加逗号。
代码看起来像这样:
for(unsigned int i=0;i<mylist.size(); i++)
{
outstring+=mylist[i];
if(i<mylist.size()-1) // Avoiding the last comma
{
outstring+=",";
}
}
Run Code Online (Sandbox Code Playgroud)
是否有避免if
语句的技巧,也许是使用 STL 的一些算法/迭代器技巧?
谢谢
使用boost::algorithm::join()
:
#include <boost/algorithm/string/join.hpp>
...
string outstring = boost::algorithm::join(mylist, ",");
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用(实际上很丑):
stringstream s;
copy(mylist.begin(), mylist.end(), ostream_iterator<string>(s, ","));
string outstring = s.str(); // still with the trailing delimiter ","
outstring.pop_back(); // pop back the last ","
Run Code Online (Sandbox Code Playgroud)