मेरे पास एक वर्ग है जो लोगों की सूची का प्रतिनिधित्व करता है।
class AddressBook
{
public:
AddressBook();
private:
std::vector<People> people;
}
मैं ग्राहकों को लोगों के वेक्टर पर पुनरावृति करने की अनुमति देना चाहता हूं। पहले सोचा था कि मैं बस था:
std::vector<People> & getPeople { return people; }
हालांकि, मैं ग्राहक को कार्यान्वयन विवरण लीक नहीं करना चाहता । जब वेक्टर को संशोधित किया जाता है, तो मैं कुछ अपरिवर्तनों को बनाए रखना चाहता हूं, और जब मैं कार्यान्वयन को लीक करता हूं तो मैं इन आक्रमणकारियों पर नियंत्रण खो देता हूं।
आंतरिक लीक किए बिना पुनरावृत्ति की अनुमति देने का सबसे अच्छा तरीका क्या है?
begin()
और end()
खतरनाक हैं क्योंकि (1) वे प्रकार वेक्टर पुनरावृत्तियां (कक्षाएं) हैं जो एक को दूसरे कंटेनर में स्विच करने से रोकता है जैसे कि ए set
। (2) यदि वेक्टर को संशोधित किया जाता है (जैसे कि उगाया गया या कुछ आइटम मिटा दिया जाता है), तो वेक्टर वेक्टर के कुछ या सभी को अमान्य किया जा सकता है।