如何很好地输出分隔字符串列表?

ere*_*eOn 3 c++ list stream

通常,当我必须显示一个单独的字符串列表时,我做了类似的事情:

using namespace std;
vector<string> mylist; // Lets consider it has 3 elements : apple, banana and orange.

for (vector<string>::iterator item = mylist.begin(); item != mylist.end(); ++item)
{
  if (item == mylist.begin())
  {
    cout << *item;
  } else
  {
    cout << ", " << *item;
  }
}
Run Code Online (Sandbox Code Playgroud)

哪个输出:

apple, banana, orange
Run Code Online (Sandbox Code Playgroud)

我最近发现std::ostream_iterator如果发现它真的很好用.

但是使用以下代码:

copy(mylist.begin(), mylist.end(), ostream_iterator<string>(cout, ", "));
Run Code Online (Sandbox Code Playgroud)

如果得到:

apple, banana, orange, 
Run Code Online (Sandbox Code Playgroud)

几乎完美,除了额外的,.是否有一种优雅的方式来处理特殊的"第一个(或最后一个)元素"并且具有与第一个代码相同的输出,而没有它的"复杂性"?

ybu*_*ill 5

虽然没有std:

cout << boost::algorithm::join(mylist, ", ");
Run Code Online (Sandbox Code Playgroud)

编辑:没问题:

cout << boost::algorithm::join(mylist | 
    boost::adaptors::transformed(boost::lexical_cast<string,int>), ", "
);
Run Code Online (Sandbox Code Playgroud)