Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
iterator [2008/12/12 02:15] gierek |
iterator [2008/12/12 02:33] 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 typow iteratorow, w zaleznosci od udostepnianych operacji: | + | Istnieje kilka typów iteratorów, w zależności od udostępnianych operacji: |
- | == iterator wejsciowy == | + | == iterator wejściowy == |
- | * wyluskiwanie do odczytu | + | * wyłuskiwanie do odczytu |
* operacje ''++i'' oraz ''i++'' | * operacje ''++i'' oraz ''i++'' | ||
- | == iterator wyjsciowy == | + | == iterator wyjściowy == |
- | * wyluskiwanie do zapisu | + | * wyłuskiwanie do zapisu |
* operacje ''++i'' oraz ''i++'' | * operacje ''++i'' oraz ''i++'' | ||
- | == iterator postepujacy == | + | == iterator postępujący == |
- | * operacje iteratorow wejsciowego oraz wyjsciowego | + | * operacje iteratorów wejściowego oraz wyjściowego |
== iterator dwukierunkowy == | == iterator dwukierunkowy == | ||
- | * operacje iteratora postepujacego | + | * operacje iteratoraiteratorao |
- | * operacje ''-—i'' oraz ''i-—'' umozliwiajace poruszanie sie po kontenerze w dwoch kierunkach | + | * operacje ''-—i'' oraz ''i-—'' umożliwiające poruszanie się po kontenerze w dwóch kierunkach |
- | == iterator dostepu swobodnego (RandomAccessIterator) == | + | == iterator dostępu swobodnego (RandomAccessIterator) == |
* operacje iteratora dwukierunkowego | * operacje iteratora dwukierunkowego | ||
- | * operacja ''i + n'', czyli wskazanie na ''n-ty'' element po elemencie, na ktory wskazuje ''i'' | + | * operacja ''i + n'', czyli wskazanie na ''n-ty'' element po elemencie, na który wskazuje ''i'' |
* operacja ''n + i'' (to samo co ''i + n'') | * operacja ''n + i'' (to samo co ''i + n'') | ||
- | * operacja ''i - n'', czyli wskazanie na ''n-ty'' element przed elementem, na ktory wskazuje ''i'' | + | * operacja ''i - n'', czyli wskazanie na ''n-ty'' element przed elementem, na który wskazuje ''i'' |
* ''i += n'' (to samo co ''i = i + n'') oraz ''i -= n'' ( ''i = i - n'' ) | * ''i += n'' (to samo co ''i = i + n'') oraz ''i -= n'' ( ''i = i - n'' ) | ||
* operator ''i[]'', czyli ''*(i + n)'' | * operator ''i[]'', czyli ''*(i + n)'' | ||
- | * ''i - j'', czyli wartosc takiego n, ze ''i = j + n'' | + | * ''i - j'', czyli wartość takiego n, ze ''i = j + n'' |
- | * ''i < j'', ktore jest prawdziwe gdy ''j - i > 0'' | + | * ''i < j'', które jest prawdziwe gdy ''j - i > 0'' |
- | * ''i > j'', ktore jest prawdziwe gdy ''j < i'' | + | * ''i > j'', które jest prawdziwe gdy ''j < i'' |
- | * ''i >= j'' (analogicznie ''i <= j''), ktore jest prawdziwe gdy ''!(i < j)'' | + | * ''i >= j'' (analogicznie ''i <= j''), które jest prawdziwe gdy ''!(i < j)'' |
- | Rozne funkcje operujace na kontenerach wymagaja iteratora spelniajacego pewne wlasciwosci, np. prototyp funkcji sort ma postac: | + | 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ć: | ||
<code cpp> | <code cpp> | ||
Linia 108: | Linia 109: | ||
</code> | </code> | ||
- | - czyli podawane argumenty musza udostepniac 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 124: | ||
* ''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 */ |