Вы должны редко иметь большую потребность / использование для непосредственного определения итератора.В частности, перебор коллекции должен обычно выполняться с помощью общего алгоритма.Если кто-то уже определил, что может выполнить эту работу, лучше всего ее использовать.Если нет, то лучше написать собственный алгоритм как алгоритм .В этом случае тип итератора становится параметром шаблона с любым именем, которое вы предпочитаете (обычно это что-то, относящееся хотя бы к категории итераторов):
template <class InputIterator>
void my_algorithm(InputIterator start, InputIterator stop) {
for (InputIterator p = start; p != stop; ++p)
do_something_with(*p);
}
Поскольку они уже упоминались, я укажучто IMO, typedef
и новые auto
в C ++ 11 (по крайней мере IMO) редко бывают хорошим ответом на эту ситуацию.Да, они могут устранить (или, по крайней мере, уменьшить) многословие в определении объекта типа итератора - но в этом случае это в основном просто лечение симптома, а не болезни.
В качестве отступления, яТакже отметим, что:
- Вектор указателей обычно является ошибкой.
- Динамическое выделение вектора еще более вероятно ошибка.
По крайней мере, сразу кажется, что вы, вероятно, уже привыкли к чему-то подобному Java, где вам всегда приходится использовать new
для создания объекта.В C ++ это относительно необычно - в большинстве случаев вы просто хотите определить локальный объект, чтобы создание и удаление обрабатывались автоматически.