Учитывая минимальный пример С++ 11 STL:
set<int> S = {1,2,3,4};
for(auto &x: S) {
cout << x;
cout << ",";
}
Есть ли способ проверить, является ли x
одним из них до самого конца? Целью этого примера является вывод 1,2,3,4
, а не конечная запятая в конце. В настоящее время я использую стандарт для цикла с двумя итераторами,
set<int>::const_iterator itr;
set<int>::const_iterator penultimate_end_itr = --S.end();
for(itr=S.begin(); itr!=penultimate_end_itr;++itr)
cout << (*itr) << ',';
cout << (*penultimate_end_itr);
Что работает, но ужасно громоздко. Есть ли способ сделать проверку в цикле на основе диапазона?
EDIT:. Вопрос заключается не в том, чтобы распечатать список, разделенный запятыми. Я хочу знать, имеет ли цикл, основанный на диапазонах, какие-либо знания предпоследнего элемента в списке (т.е. Он один до конца). Минимальный пример был представлен таким образом, что у всех нас есть общий блок кода, о котором можно говорить.