Реализация итераторов может быть чрезвычайно полезна, и я делал это довольно часто. Итератор - это простая концепция, которую все знают, как использовать. Итераторы позволяют использовать алгоритмы STL.
Зачастую вы можете реализовать итераторы, чтобы упростить использование часто используемых API-интерфейсов операционной системы, таких как Windows * FindNextFile
Когда вы пишете file_iterator (уже существует в boost), вы можете внезапно сделать:
file_iterator itBegin; // initialize appropriately
file_iterator itEnd;
std::vector< HANDLE > vecFiles( itBegin, itEnd );
, чтобы получить список дескрипторов для всех соответствующих файлов. Без итератора необходимые вызовы API затруднили бы чтение вашего кода.
Думайте об итераторах как о простых понятиях, которые позволяют вам написать то, что вы действительно хотите сказать, и абстрагироваться от мельчайших деталей. Если вам нужно реализовать сложный алгоритм, который сам по себе труден для понимания, вы хотите уменьшить помехи в коде.
Если у вас двумерная структура, например, std :: vector , другими словами, таблица, в которой каждый внутренний вектор должен иметь одинаковую длину, вам может потребоваться выполнить итерацию по каждому n-му элементу внутренних векторов. Если это происходит достаточно часто, ваш код может стать намного проще, когда вы реализуете итератор, а не распределяете вложенные циклы for по всему коду.