Mam klasę reprezentującą listę osób.
class AddressBook
{
public:
AddressBook();
private:
std::vector<People> people;
}
Chcę pozwolić klientom na iterację po wektorze ludzi. Pierwszą myślą, którą miałem, było po prostu:
std::vector<People> & getPeople { return people; }
Nie chcę jednak ujawniać klientowi szczegółów implementacji . Mogę chcieć zachować pewne niezmienniki, gdy wektor jest modyfikowany, i tracę kontrolę nad tymi niezmiennikami, gdy wyciekam z implementacji.
Jaki jest najlepszy sposób na iterację bez wycieku elementów wewnętrznych?
begin()
i end()
jest niebezpieczne, ponieważ (1) te typy są iteratorami (klasami) wektorów, które uniemożliwiają przejście do innego kontenera, takiego jak a set
. (2) Jeśli wektor zostanie zmodyfikowany (np. Wyhodowany lub niektóre elementy usunięte), niektóre lub wszystkie iteratory wektora mogły zostać unieważnione.