class X {
public:
typedef std::list<int> Container;
// (1)
const Container& GetElements() const;
// (2)
Container::iterator ElementBegin();
Container::iterator ElementEnd();
// (3)
CustomIterator GetElementIterator();
private:
Container m_container;
};
Я ищу последовательный и чистый способ предоставления итераторам для инкапсулированных контейнеров вызывающей стороне. Я придумал три идеи, отмеченные в исходном коде выше.
на контейнер
является константой, вы сможете использовать только const_iterator
. Возвращать неконстантную ссылку - это плохо, потому что сам контейнер может быть изменен (например, clear ()
). size ()
(например, GetElementCount ()
). iterator :: distance ()
можно использовать, но это может быть неэффективно для некоторых контейнеров (где оператор ++
/ -
вызывается повторно для вычисления расстояния) . next ()
и т. Д. По-прежнему требуется собственный метод size ()
. Я уверен, что есть более хорошие решения, так что если вы знаете, я буду рад их видеть.