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.