Skąd operator zakresu w iteratorach?

Skąd operator zakresu w iteratorach?
BB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 100lica
  • Postów: 79
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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
2

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

Kopiuj
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)

BB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: 100lica
  • Postów: 79
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!

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
3

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

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.