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:24] gierek |
iterator [2008/12/12 02:33] gierek |
||
---|---|---|---|
Linia 3: | Linia 3: | ||
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. | 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: ===== |
- 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''. | - 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''. | ||
- Możliwość przypisania jednego iteratora do drugiego. Jeśli ''p'' i ''q'' są 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''. | ||
Linia 9: | Linia 9: | ||
- Za pomocą iteratora można odwiedzić wszystkie elementy kontenera. Dla iteratora ''p'' zdefiniowane są instrukcje ''p++'' oraz ''++p''. | - Za pomocą iteratora można odwiedzić wszystkie elementy kontenera. Dla iteratora ''p'' zdefiniowane są instrukcje ''p++'' oraz ''++p''. | ||
- | ==== Przykładowy iterator ==== | + | ===== Przykładowy iterator ===== |
<code cpp> | <code cpp> | ||
/* klasa wezla kontenera */ | /* klasa wezla kontenera */ | ||
Linia 76: | Linia 76: | ||
</code> | </code> | ||
- | ==== Rodzaje iteratorów ==== | + | ===== 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 101: | Linia 101: | ||
* ''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 109: | ||
</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 każda klasa kontenerowa posiada definicje odpowiedniego iteratora klasy. Dla jednej może być to wskaźnik (który również może być iteratorem, jako ze 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. | + | 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 dostępu swobodnego: == | == Iteratory dostępu swobodnego: == | ||
Linia 126: | Linia 127: | ||
* ''hash_set<T>::iterator'' | * ''hash_set<T>::iterator'' | ||
- | ==== Korzystanie z iteratorów ==== | + | ===== Przykład - Korzystanie z iteratorów ===== |
<code cpp> | <code cpp> | ||
/* Przyklad - korzystanie z iteratorow */ | /* Przyklad - korzystanie z iteratorow */ |