nie mam pojęcia jak rozumiesz dokumentację i zaszedłeś tak daleko bo drażni mnie to, że wypisujecie mi różne rzeczy nie rozumiejąc w ogóle tego co się do was pisze, a piszesz mi czy to co napisałem to jest (np) iterator?
a czy czytałeś tytuł posta ? Czy na tej zasadzie działa iterator
- chyba jest ogromna różnica co nie ?
Dobrze, to podejdę do tematu inaczej - od podstawy.
Wyobraź sobie proszę taki scenariusz:
Piszesz program, który ma przechowywać powiedzmy listę plików w całym systemie operacyjnym. Dajmy na to że przechowujesz je w tablicy o dynamicznym rozmiarze, jest to główna część aplikacji, więc masz w programie 40 pętli for
, które iterują po tej tablicy żeby coś z nią zrobić (przefiltrować, przemapować, etc.). Zauważasz że masz problem z wydajnością usuwania elementów z początku, więc podejmujesz decyzję, żeby zmienić tą tablicę z plikami na listę jednokierunkową - jakie to ma konsekwencje. No oczywiście takie, że teraz musisz zmienić swojego for
a na while
żeby iterować odpowiednio po liście jednokierunkowej. Potem podejmujesz decyzję, że jednak nie chcesz pisać swoich kolekcji, tylko używasz vectora z C++; i co musisz zrobić - znowu zmienić wszystkie swoje pętle na takie co używają .start()
i .end()
.
W branży to się nazywanie niehermetyczność - bo struktura danych (tablica, lista, vektor) jest "widoczna" oraz "na wierzchu" i wszystko co z niej korzysta musi o niej wiedzieć - co ma taką niemiłą konsekwencję, że jeśli ta struktura się zmieni, to pętle też będą musiały się zmienić - wszystkie (a skoro i zmienić, to i przekompilować).
Jednym z rozwiązań na to byłby iterator - czyli wystawienie pewnego "pokrowca" na kolekcję, w taki sposób żeby Twoje pętle używały właśnie iteratora.
Scenariusz drugi:
Masz ten sam program, który ma dynamiczną tablicę z listą plików, ale Twoje 40 pętli nie iteruje po samej tablicy, tylko po iteratorze który wystawiłeś. Teraz chcesz zmienić tablicę na listę jednokierunkową - musisz więc zmienić iterator... i koniec. Nie ma więcej zmian. Jeśli iterator był w osobnym pliku .h
, to nawet nie musisz rekompilować swoich pętli po takiej zmianie. Są oczywiście inne zalety iteratora, ale to jest taka główna.
Podsumowanie
I teraz sam sobie odpowiedz - wiedząc sens użycia iteratora - sam odpowiedz sobie na pytanie. Jak (do jasnej anielki) ma się Twój kod z pierwszego wątku do tej idei? Odpowiedź nasuwa się sama - Twój kod z pierwszego wątku oraz iterator nie mają ze sobą żadnego związku.
@zkubinski: Owszem, stworzyłeś pewnego rodzaju warstwę abstrakcji logicznej na iterowanie kolekcji - to Ci trzeba przyznać - ale po pierwsze w dosyć średni sposób; a po drugie nie każda warstwa abstrakcji na dostęp do kolekcji to od razu iterator.
zrobiłem tablicę na adresy określonego typu danych - chciałbym zapytać czy mniej więcej na tej zasadzie działa iterator ?
Jeśli chcesz się dowiedzieć "na jakiej zasadzie działa iterator" to zapoznaj się z: https://pl.wikibooks.org/wiki/C%2B%2B/Iteratory
nie mam pojęcia jak rozumiesz dokumentację i zaszedłeś tak daleko bo drażni mnie to, że wypisujecie mi różne rzeczy nie rozumiejąc w ogóle tego co się do was pisze, a piszesz mi czy to co napisałem to jest (np) iterator?
a czy czytałeś tytuł posta ? Czy na tej zasadzie działa iterator
- chyba jest ogromna różnica co nie ?
Dla mnie to wygląda jakbyś mi pokazał cztery kółka wciśnięte w kulkę plasteliny, i zapytał "czy na tej zasadzie działa samochód".