Итераторы нужны лишь для удобства?
Всем добра!
Решил на досуге почитать про библиотеку STL. Сам я начинающий разработчик с опытом написания небольших (~2000-5000 строк) desktop приложений для автоматизации процессов на предприятии в 1,5 года.
Собственно дошел до итераторов и встал вопрос, а в чем их, собственно, принципиальная надобность? Заменить указатели на массивы, чтобы повысить читаемость + безопасность? В каких вообще случаях они применимы и обязательны?
Я в целом не пользовался указателями на массивы, кроме случаев, когда их надо передать в другие функции, но сортировку/выборку элементов/прч операции выполнял по "старому-доброму"
for (int i = 0; i < n; i++){
arr[i] = i;
}
Собственно мне и интересно, насколько часто встречается использование итераторов и может мне имеет смысл потратить время чтобы научиться ими пользоваться здесь и сейчас?
Ответы (1 шт):
Указатели - подвид итераторов, поэтому вы их уже используете. (Итератор - это любой тип, на котором работают определенные операторы - *, ++, ...)
Но в отличие от указателей, у итератора ++, -- переключают его на соседние по смыслу элементы контейнера, а не на соседние блоки в памяти.
В каких вообще случаях они применимы и обязательны?
Вопрос странный. Цикл по любому контейнеру (кроме std::vector, std::deque, std::array) придется делать через итераторы, потому что контейнер не умеет выдавать элементы по индексу.
Или допустим у вас есть std::map, и вы хотите в ней найти значение по ключу - .find() возвращает итератор. Хотите удалить значение? .erase() принимает итератор. Хотите посмотреть соседние значения? ++ и -- на итераторе.