Итератор - это все, что ведет себя как итератор. Тогда аллокатор - это все, что ведет себя как аллокатор:D
Как понятно выше, я не полностью разобралась с этими плюсовыми аллигаторами. С итератором как будто понятно: делаем указатель и перегружаем математические операции (т.е. даем стандартным +, -, ++, -- работать с нашим итератором). Непонятно только зачем это делать, если указатели и без отдельного класса нормально работали. Единственное объяснение для себя - чтобы не путаться, постоянно прописывая длинную цепочку. Обозвал итератором переменную и красота. Хотя для подобной же цели есть ключевое слово auto, с ним вообще шедеврально получается.
Аллокатор пока самостоятельно не создавала, хотя и пишу лист. По-хорошему, нужно изолировать выделение в контейнере новой памяти (т.е. чтобы ни один метод напрямую к сырой памяти не обращался), для чего и нужны аллокаторы. Как будто эта штука заранее резервирует кусок памяти для экземпляра класса. Но пока непонятно, как аллокатор работает, а такой код я не люблю. Но однажды пойму и буду использовать.
Из забавного: оригинальный метод листа erase (удаляет элемент с заданной позиции) сегается при попытке удалить элемент от итератора на конец. Это логично, потому что метод end(), который этот итератор возвращает, ссылается на несуществующий следующий элемент последнего элемента, т.е. на nullptr. Что не логично, так это то, что если инкрементировать итератор конца на единицу, то тут erase() не сегнется, а начнет удалять элементы по кругу. О! Пока писала, поняла, что это похоже на прибавление к 0 в математике. Получается логичным, что когда мы дойдем инкрементом конца до конца еще раз, он снова сегнется, а до этого мы как будто прибавляем нулевой адрес к адресу существующему.
#школа_21 #cpp