Skąd operator zakresu w iteratorach?

0

Heyka, mam pytanko jak jest zaimplementowany iterator w C++, że musimy go deklarować przez podawanie operatora zakresu? Czy to jest jakiś obiekt statyczny wewnątrz danej klasy?
Z góry dzięki za wyjaśnienie

2

Jest to najczęściej klasa zdefiniowana wewnątrz klasy kontenera

class Vec{
public:
class Iterator{};

Iterator begin();

// ...
};

W C++11 poprawną implementacją są także SCARY iteratory ( http://blogs.msdn.com/b/vcblog/archive/2012/04/06/10291485.aspx ), które są implementowane jako typedef na klasę niezależną od kontenera (np. w celu zapewnienia tego samego typu dla iteratorów map o różnych funkcjach sortujących lub alokatorach)

0

Ohh, teraz zaczyna mi się to powoli układać... Chociaż muszę to jeszcze przemyśleć jak w takim razie "wyłuskuje" się obiekt nadrzędny... Ale może dam radę ;)
pozdrawiam!

3

"wyłuskuje" się obiekt nadrzędny - przez przeciążenie operatora *
dla vector może to być jeszcze prostsze:

class DoubleVector
  {
   unsigned size;
   double *buff;
   public:
   ...
   typedef double *iterator;
   iterator begin()const { return buff; }
   iterator end()const { return buff+size; }
  };

1 użytkowników online, w tym zalogowanych: 0, gości: 1