通常情况下,当我需要显示一个分隔字符串列表时,我会做类似以下的事情:
如果获取到:
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;
}
}
这将输出:
apple, banana, orange
我最近发现了std::ostream_iterator
,觉得使用起来非常方便。
但是使用以下代码时:
copy(mylist.begin(), mylist.end(), ostream_iterator<string>(cout, ", "));
如果获取到:
apple, banana, orange,
除了多余的,
之外,几乎完美。有没有一种优雅的方式来处理特殊的“第一个(或最后一个)元素情况”,并且使输出与第一个代码相同,但不具有其“复杂性”?
transform
或者accumulate
做一些有趣的事情,但这需要使用functors。你不必写一个循环,但你必须编写代码。 - John Dibling