История изменений
Исправление svyatozar, (текущая версия) :
Если говорим о доступе к элементам vector-а через указатель, то тут можно согласиться с поломанной инкапсуляцией, потому что тут мы получаем доступ сразу ко всем данным и можем их править через какой-нибудь memcpy(). Если говорим об итераторе - то через него мы получаем доступ только к одному элементу. Итераторы для каждого контейнера ведь имеют свой тип, совместимый только с этим контейнером. И как мы можем рассматривать list, например, как структуру, если у него элементы раскиданы по куче в произвольном порядке?
А если у объекта есть сеттер и геттер для какого-то поля - то этот объект тоже превращается в структуру? Понятно, что такой подход не является идеальным, но то, что он противоречит ООП - спорное утверждение.
Сеттер и геттер, особенно виртуальные, могут давать побочный эффект, даже если не в первом поколении - это объект, т.е. чёрный ящик. А итератор даёт указатель и делай с ним что хочешь, минуя методы объекта!
Исходная версия svyatozar, :
Если говорим о доступе к элементам vector-а через указатель, то тут можно согласиться с поломанной инкапсуляцией, потому что тут мы получаем доступ сразу ко всем данным и можем их править через какой-нибудь memcpy(). Если говорим об итераторе - то через него мы получаем доступ только к одному элементу. Итераторы для каждого контейнера ведь имеют свой тип, совместимый только с этим контейнером. И как мы можем рассматривать list, например, как структуру, если у него элементы раскиданы по куче в произвольном порядке?
А если у объекта есть сеттер и геттер для какого-то поля - то этот объект тоже превращается в структуру? Понятно, что такой подход не является идеальным, но то, что он противоречит ООП - спорное утверждение.
Сеттер и геттер, особенно виртуальные, могут давать побочный эффект - это объект, т.е. чёрный ящик. А итератор даёт указатель и делай с ним что хочешь, минуя методы объекта!