Итераторы нужны лишь для удобства?

Всем добра!

Решил на досуге почитать про библиотеку STL. Сам я начинающий разработчик с опытом написания небольших (~2000-5000 строк) desktop приложений для автоматизации процессов на предприятии в 1,5 года.

Собственно дошел до итераторов и встал вопрос, а в чем их, собственно, принципиальная надобность? Заменить указатели на массивы, чтобы повысить читаемость + безопасность? В каких вообще случаях они применимы и обязательны?

Я в целом не пользовался указателями на массивы, кроме случаев, когда их надо передать в другие функции, но сортировку/выборку элементов/прч операции выполнял по "старому-доброму"

    for (int i = 0; i < n; i++){
       arr[i] = i;
    }

Собственно мне и интересно, насколько часто встречается использование итераторов и может мне имеет смысл потратить время чтобы научиться ими пользоваться здесь и сейчас?


Ответы (1 шт):

Автор решения: HolyBlackCat

Указатели - подвид итераторов, поэтому вы их уже используете. (Итератор - это любой тип, на котором работают определенные операторы - *, ++, ...)

Но в отличие от указателей, у итератора ++, -- переключают его на соседние по смыслу элементы контейнера, а не на соседние блоки в памяти.

В каких вообще случаях они применимы и обязательны?

Вопрос странный. Цикл по любому контейнеру (кроме std::vector, std::deque, std::array) придется делать через итераторы, потому что контейнер не умеет выдавать элементы по индексу.

Или допустим у вас есть std::map, и вы хотите в ней найти значение по ключу - .find() возвращает итератор. Хотите удалить значение? .erase() принимает итератор. Хотите посмотреть соседние значения? ++ и -- на итераторе.

→ Ссылка