I am trying to improve my knowledge on iterators, I think I have a decent understanding of their functionality as well as their benefits. I had a question on providing multiple iterators for a class, where each iterator iterates over a different member. Lets say we have the class
2) Provide direct access to containers so users can call needed functions manually or provide access to proxy classes providing only limited access to containers (so nobody will reassign, resize vectors or do something unexpected):
This approach is good as it allows to use ranged for and many container functions on any subcontainer easily.
3) Do something else/change one of the previous approaches
Unless you want your class to be and threated as iteratable do not provide member function begin for it. (for example in your case it is unclear what vector should be accessed by default.)