Tôi có một lớp đại diện cho một danh sách những người.
class AddressBook
{
public:
AddressBook();
private:
std::vector<People> people;
}
Tôi muốn cho phép khách hàng lặp đi lặp lại trên vectơ của mọi người. Ý nghĩ đầu tiên tôi có chỉ đơn giản là:
std::vector<People> & getPeople { return people; }
Tuy nhiên, tôi không muốn rò rỉ các chi tiết triển khai cho khách hàng . Tôi có thể muốn duy trì một số bất biến nhất định khi vectơ được sửa đổi và tôi mất quyền kiểm soát các bất biến này khi tôi rò rỉ việc thực hiện.
Cách tốt nhất để cho phép lặp mà không rò rỉ nội bộ là gì?
begin()
và end()
rất nguy hiểm vì (1) các kiểu đó là các vòng lặp vectơ (các lớp) ngăn không cho một người chuyển sang vùng chứa khác như a set
. (2) Nếu vectơ được sửa đổi (ví dụ: đã tăng hoặc xóa một số mục), một số hoặc tất cả các trình lặp vectơ có thể đã bị vô hiệu.