Обычно, когда я должен был отобразить список разделенных строк, я делаю что-то вроде:Как приятно выводить список разделенных строк?
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,
Почти идеально, за дополнительную ,
исключением. Есть ли элегантный способ обработать специальный «первый (или последний) случай элемента» и иметь тот же результат, что и первый код, без его «сложности»?
К сожалению, ответа нет. –
Возможный дубликат [Печать списков с запятыми C++] (http://stackoverflow.com/questions/3496982/printing-lists-with-commas-c) Назовите меня предвзятым, если вы (в конце концов, я), но я думаю, мой ответ на этот вопрос особенно чист ... :-) –
Я имею в виду, вы можете делать фанковые вещи с помощью 'transform' или' accumulate', но они будут включать использование функторов. Вам не нужно писать цикл, но вам придется писать код. –