Narzędzia użytkownika

Narzędzia witryny


iterator

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Previous revision
Next revision
Previous revision
iterator [2008/12/12 02:11]
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 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>
 template <class RandomAccessIterator>​ template <class RandomAccessIterator>​
  void sort ( RandomAccessIterator first, RandomAccessIterator last );  void sort ( RandomAccessIterator first, RandomAccessIterator last );
 +</​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''​ 
-    * vector<​T>::​const_iterator +    * ''​vector<​T>::​const_iterator''​ 
-    * deque<​T>::​iterator +    * ''​deque<​T>::​iterator''​ 
-    * deque<​T>::​const_iterator ​+    * ''​deque<​T>::​const_iterator'' ​
  
 == Iteratory dwukierunkowe:​ == == Iteratory dwukierunkowe:​ ==
-    * 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 */
iterator.1229044290.txt.gz · ostatnio zmienione: 2008/12/12 02:11 przez gierek