ещё для определения окончания вектора открыл для себя std::next, и вот так это можно проверить:
if(std::next(iter) != vec.end()) {
std::cout << ",";
}
у меня это стабильно отрабатывает, небольшой вопрос вызывает момент когда мы итерируемся по последнему элементу, в таком случае std::next(iter) не может ли привести к крашу или так всё же безопасно делать? А то в доке возможности состояние ошибки не вижу