Стандарт предоставляет итераторы для массивов:
#include <iterator>
T arr[100];
for (auto it = std::begin(arr), end = std::end(arr); it != end; ++it)
{
foo(*it);
it->zap();
}
Тип it
будет просто T *
, но это дает вам единый интерфейс.
Термин «итератор» на самом деле относится к концепции , а не к какому-либо конкретному коду. Голые указатели - совершенно законные итераторы. Важно то, что std::iterator_traits
дает правильные typedefs, что и для голых указателей.