У мене є клас, який представляє список людей.
class AddressBook
{
public:
AddressBook();
private:
std::vector<People> people;
}
Я хочу дозволити клієнтам перебирати вектор людей. Перша думка у мене була просто:
std::vector<People> & getPeople { return people; }
Однак я не хочу просочувати деталі реалізації клієнту . Я, можливо, захочу підтримувати певні інваріанти, коли вектор модифікований, і я втрачаю контроль над цими інваріантами, коли витікаю реалізацію.
Який найкращий спосіб дозволити ітерацію, не протікаючи внутрішні?
begin()
і end()
небезпечний тим , що (1) цих типів векторних ітератори (класи) , який запобігає один від переходу в інший контейнер , такі як set
. (2) Якщо вектор модифікований (наприклад, вирощений або стираються деякі елементи), деякі або всі векторні ітератори можуть бути визнані недійсними.