Как красиво вывести список разделенных строк? - PullRequest
3 голосов
/ 27 сентября 2010

Обычно, когда мне приходилось отображать список разделенных строк, я делал что-то вроде:

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, 

Почти идеально, за исключением дополнительного ,,Есть ли элегантный способ обработки специального «первого (или последнего) случая элемента» и получения того же результата, что и первого кода, без его «сложности»?

1 Ответ

5 голосов
/ 27 сентября 2010

Хотя не с std:

cout << boost::algorithm::join(mylist, ", ");

РЕДАКТИРОВАТЬ: Нет проблем:

cout << boost::algorithm::join(mylist | 
    boost::adaptors::transformed(boost::lexical_cast<string,int>), ", "
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...