Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision | ||
iterator [2008/12/12 02:21] gierek |
iterator [2008/12/12 02:35] (aktualna) gierek |
||
---|---|---|---|
Linia 1: | Linia 1: | ||
====== Iterator ====== | ====== Iterator ====== | ||
- | Iterator jest uogolniona reprezentacja procesu poruszania sie po kontenerze, niezalezna od typu danych przechowywanych w kontenerze, ale takze od struktury danych samego kontenera. | + | Iterator jest uogólnioną reprezentacja procesu poruszania się po kontenerze, niezależną od typu danych przechowywanych w kontenerze, ale także od struktury danych samego kontenera. |
- | ==== Cechy iteratora: ==== | + | ===== Cechy iteratora: ===== |
- | - Mozliwosc wyluskania iteratora w celu uzyskania dostepu do wartosci, na ktora wskazuje. Jesli p jest iteratorem, to jest zdefiniowane wyrazenie ''*p''. | + | - Możliwość wyłuskania iteratora w celu uzyskania dostępu do wartości, na którą wskazuje. Jeśli p jest iteratorem, to jest zdefiniowane wyrażenie ''*p''. |
- | - Mozliwosc przypisania jednego iteratora do drugiego. Jesli ''p'' i ''q'' sa iteratorami, to zdefiniowane jest ''p = q''. | + | - Możliwość przypisania jednego iteratora do drugiego. Jeśli ''p'' i ''q'' są iteratorami, to zdefiniowane jest ''p = q''. |
- | - Mozliwosc porownania jednego iteratora z drugim. Jesli ''p'' i ''q'' sa iteratorami, zdefiniowane sa wyrazenia ''p == q'' oraz ''p != q''. | + | - Możliwość porównania jednego iteratora z drugim. Jeśli ''p'' i ''q'' są iteratorami, zdefiniowane są wyrażenia ''p == q'' oraz ''p != q''. |
- | - Za pomoca iteratora mozna odwiedzic wszystkie elementy kontenera. Dla iteratora ''p'' zdefiniowane sa instrukcje ''p++'' oraz ''++p''. | + | - Za pomocą iteratora można odwiedzić wszystkie elementy kontenera. Dla iteratora ''p'' zdefiniowane są instrukcje ''p++'' oraz ''++p''. |
- | ==== Przykladowy iterator ==== | + | ===== Przykładowy iterator ===== |
<code cpp> | <code cpp> | ||
/* klasa wezla kontenera */ | /* klasa wezla kontenera */ | ||
Linia 76: | Linia 76: | ||
</code> | </code> | ||
- | ==== Rodzaje iteratorow ==== | + | ===== Rodzaje iteratorów ===== |
Istnieje kilka typów iteratorów, w zależności od udostępnianych operacji: | Istnieje kilka typów iteratorów, w zależności od udostępnianych operacji: | ||
== iterator wejściowy == | == iterator wejściowy == | ||
Linia 100: | Linia 100: | ||
* ''i > j'', które jest prawdziwe gdy ''j < i'' | * ''i > j'', które jest prawdziwe gdy ''j < i'' | ||
* ''i >= j'' (analogicznie ''i <= j''), które jest prawdziwe gdy ''!(i < j)'' | * ''i >= j'' (analogicznie ''i <= j''), które jest prawdziwe gdy ''!(i < j)'' | ||
+ | |||
+ | |||
+ | Każdy typ jest też typem niższego poziomu. | ||
Rożne funkcje operujące na kontenerach wymagają iteratora spełniającego pewne właściwości, np. prototyp funkcji sort ma postać: | Rożne funkcje operujące na kontenerach wymagają iteratora spełniającego pewne właściwości, np. prototyp funkcji sort ma postać: | ||
Linia 108: | Linia 111: | ||
</code> | </code> | ||
- | - czyli podawane argumenty muszą udostępniać operacje i + n, i - n itp. | + | czyli podawane argumenty muszą udostępniać operacje ''i + n'', ''i - n'' itp. |
- | ==== Iteratory w bibliotece standardowej ==== | + | ===== Iteratory w bibliotece standardowej ===== |
- | W bibliotece STL kazda klasa kontenerowa posiada definicje odpowiedniego iteratora klasy. Dla jednej moze byc to wskaznik (ktory rowniez moze byc iteratorem, jako ze posiada wszystkie wymagane wlasciwosci), dla innej moze byc to obiekt. Ponadto klasy te posiadaja metody begin() oraz end(), ktore zwracaja iteratory na pierwszy element kontenera oraz na pozycje za ostatnim elementem. | + | W bibliotece STL każda klasa kontenerowa posiada definicję odpowiedniego iteratora klasy. Dla jednej może być to wskaźnik (który również może być iteratorem, jako że posiada wszystkie wymagane właściwości), dla innej może być to obiekt. Ponadto klasy te posiadają metody ''begin()'' oraz ''end()'', które zwracają iteratory na pierwszy element kontenera oraz na pozycje za ostatnim elementem. |
- | == Iteratory dostepu swobodnego: == | + | == Iteratory dostępu swobodnego: == |
* ''T*'' (wskaznik) | * ''T*'' (wskaznik) | ||
* ''vector<T>::iterator'' | * ''vector<T>::iterator'' | ||
Linia 123: | Linia 126: | ||
* ''list<T>::iterator '' | * ''list<T>::iterator '' | ||
- | == Iteratory postepujace: == | + | == Iteratory postępujace: == |
* ''hash_set<T>::iterator'' | * ''hash_set<T>::iterator'' | ||
- | ==== Korzystanie z iteratorow ==== | + | ===== Przykład - Korzystanie z iteratorów ===== |
<code cpp> | <code cpp> | ||
/* Przyklad - korzystanie z iteratorow */ | /* Przyklad - korzystanie z iteratorow */ |