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
0
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; }
};