Saya memiliki kelas yang mewakili daftar orang.
class AddressBook
{
public:
AddressBook();
private:
std::vector<People> people;
}
Saya ingin memungkinkan klien untuk beralih pada vektor orang. Pikiran pertama yang saya miliki hanyalah:
std::vector<People> & getPeople { return people; }
Namun, saya tidak ingin membocorkan detail implementasi ke klien . Saya mungkin ingin mempertahankan invarian tertentu ketika vektor dimodifikasi, dan saya kehilangan kendali atas invarian ini ketika saya membocorkan implementasinya.
Apa cara terbaik untuk memungkinkan iterasi tanpa membocorkan internal?
begin()
dan end()
berbahaya karena (1) jenis tersebut adalah vektor iterator (kelas) yang mencegah seseorang beralih ke wadah lain seperti a set
. (2) Jika vektornya diubah (misal item yang ditanam atau terhapus), beberapa atau semua iterator vektor bisa saja tidak valid.