Я думаю, что вы уменьшаете полезность своей функции, когда возвращаете итераторы всей карты. Потребитель функции может просто написать getMap (). Begin (), чтобы получить итератор. С другой стороны, они могут вообще не интересоваться элементами, они могут захотеть clear()
it или swap()
it.
Однако, когда выводится некоторое подмножество коллекции, например, диапазон или некоторые элементы, выбранные предикатом, возвращать данные через выходной итератор гораздо лучше, чем возвращать уменьшенную коллекцию.
Стандартная библиотека делает это постоянно, например, copy()
алгоритм:
template<class InputIterator, class OutputIterator>
OutputIterator copy ( InputIterator first, InputIterator last, OutputIterator result )
{
while (first!=last) *result++ = *first++;
return result;
}
Здесь result
может добавлять элементы в другой класс коллекции (с помощью back_inserter
), выводить на экран или даже обрабатывать элементы, не сохраняя их где-либо, например. вычисление статистики по предмету в коллекции.