iterator we własnych kontenerach

iterator we własnych kontenerach
R2
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Witajcie

Chciałbym stworzyć własny kontener danych, działający powiedzmy na zasadzie drzewa, a także dorobić do niego iterator wejściowy. Mógłbym zdefiniować własną klasę Iterator, dorobić wszystkie potrzebne definicje operatorów i w ten sposób posługiwać się iteratorami, lecz zastanawiam się, czy nie ma możliwośći wykorzystania w tym celu standardowej biblioteki <iterator>? A jeśli jest -> czy moglibyście zaprezentować jak, wykorzystując ją, zdefiniować własny typ iteratora, odpowiedni dla kontenera?

PR
Niedawno miałem podobny problem, tyle że nie był mi potrzebny aż tak rozbudowany iterator, to użyłem typedefa
R2
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Dzięki za pomoc, gdyż choć większość z tych linków już widziałem, pierwszy mi bardzo pomógł. Mam jednak kolejne pytanie. W pierwszym linku w przykładzie autor definiuje iterator do tablicy. Definiowanie operatora inkrementacji (post czy pre) jest dla takiego obiektu bardzo proste. A czy ktoś mógłby mi pomóc, ze zdefiniowaniem takiego operatora dla drzewa BST? Nie mam pojęcia jak wymyśleć algorytm do poruszania się po elementach drzewa w kolejności, nie mogąc użyć rekurencji...

edytowany 2x, ostatnio: Robert2k9
n0name_l
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 4 lata
  • Postów:2412
0

Szukasz ty cos w google?
http://en.wikipedia.org/wiki/Tree_traversal#Types drugi akapit.

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
2
Kopiuj
node *increment(node *cur)
  {
   if(cur->right)
     {
      cur=cur->right;
      while(cur->left) cur=cur->left;
     }
   else
     {
      node *tmp=cur->parent;
      while(cur==tmp->right) tmp=(cur=tmp)->parent;
      if(cur->right!=tmp) cur=tmp;
     }
    return cur;
   }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
R2
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0
n0name_l napisał(a):

Szukasz ty cos w google?
http://en.wikipedia.org/wiki/Tree_traversal#Types drugi akapit.

Co innego to przechodzenie rekurencyjnie po wszystkich elementach drzewa, co jest proste i bezbolesne, a co innego to inkrementacja iteratora, który nie ma jak odwoływać się rekurencyjnie do pozostałych poddrzew, dlatego też TAK, mam za sobą długie godziny szukania w google, które nie dały mi konkretnej odpowiedzi jak to szukanie zrealizować, biorąc pod uwagę możliwe modyfikacje drzewa pomiędzy inkrementacjami iteratora (odpada zapisywanie pozycji w stacku). Tym bardziej dziękuję za powyższy algorytm

n0name_l
Czyli bledne zalozenia. W trakcie iteracji modyfikacja kolekcji powinna byc zabroniona, bezwzglednie.
R2
  • Rejestracja:ponad 11 lat
  • Ostatnio:prawie 11 lat
  • Postów:7
0

Jeszcze jedno pytanie specyficzne dla drzewa - jak zdefiniować metodę end()? Mam problem z wymyśleniem jak zdefiniować iterator "pierwszy za ostatnim" (past the end) -> nie może to być null, bo jest ich w drzewie dużo, nie może to być ostatni element, gdyż w pętli
for(it=drzewo.begin();it!=drzewo.end();++it)
zostałby pominięty. Próbowałem zdefiniować obiekt statyczny, który umieszczałbym za ostatnim elementem, lecz musi on być zainicjalizowany przez użytkownika klasy...
Będę wdzięczny za pomoc

edytowany 1x, ostatnio: Robert2k9
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
0

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 godzin
0

Jeszcze jedno pytanie specyficzne dla drzewa - jak zdefiniować metodę end()?
Pokaż co zrobiłeś do tej pory.

edytowany 1x, ostatnio: Azarien

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.