Tengo una clase que representa una lista de personas.
class AddressBook
{
public:
AddressBook();
private:
std::vector<People> people;
}
Quiero permitir que los clientes repitan el vector de las personas. El primer pensamiento que tuve fue simplemente:
std::vector<People> & getPeople { return people; }
Sin embargo, no quiero filtrar los detalles de implementación al cliente . Es posible que desee mantener ciertos invariantes cuando se modifica el vector, y pierdo el control sobre estos invariantes cuando pierdo la implementación.
¿Cuál es la mejor manera de permitir la iteración sin filtrar las partes internas?
begin()
y end()
son peligrosos porque (1) esos tipos son iteradores de vectores (clases) que evitan que uno cambie a otro contenedor como a set
. (2) Si se modifica el vector (p. Ej., Crecido o algunos elementos borrados), algunos o todos los iteradores del vector podrían haberse invalidado.