C++/Iteratory: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
47fc19cc (dyskusja | edycje)
mNie podano opisu zmian
Linia 1:
== Wstęp ==
Idea iteratorów opiera się na tym, by ułatwić i usprawnić pracę na kontenerach. Daje możliwość dotarcia do danego składnika pojemnika bez konieczności znajomości jego struktury. Słusznie używanie iteratora przypomina pracę przy pomocy zwykłych wskaźników. Jest on jednak czymś więcej niż wskaźnik - w przeciwieństwie do wskaźników, korzystając z iteratora nie musimy martwić się czy przypadkiem nie przekroczyliśmy zakresu pojemnika ani czy poprawnie wskazuje nam on na element. Tym wszystkim zajmuje się sam iterator, co pozwala programiście skupić się na innych problemach w trakcie tworzenia programu.
 
Czym więc jest iterator? Jest on pewnego rodzaju uogólnionym wskaźnikiem. Strukturalnie iterator jest obiektem, który wskazuje na inny obiekt. Można używać gotowych iteratorów dla kontenerów z STL przez dołaczeniedołączenie biblioteki '''<iterator>''' i w przestrzeni nazw '''std'''.
 
Istnieją pewne analogie między iteratorem a wskaźnikiem. Przede wszystkim znajomo wyglądają wyrażenia:
Linia 105:
3
 
Metody begin() i end() skonstruowane są do przeglądania wektora od początku do końca. Co jeśli chcemy działać na składowych wektora w odwrotnej kolejności? Nie ma problemu. Istnieje bowiem metoda '''rbegin()''', która zwraca odwrócony iterator wskazujący na ostatni element pojemnika (mówi się także, że jest to odwrócony początek). Odwołuje się on do elementu bezpośrednio poprzedzającego iterator wskazywany przez end. Jest to odwrócony iterator bezpośredniego dostępu. Mamy także metodemetodę '''rend()''', która zwraca odwrócony iterator do elementu odwołującego się do elementu bezpośrednio poprzedzającego pierwszy element kontenera wector (zwany także odwróconym końcem). rend() wskazuje miejsce bezpośrednio poprzedzające składnik do którego odwoływałby się begin(). Oto przykład:
<source lang="cpp">
#include <iostream>
Linia 137:
 
{{Porada|
Używanie iteratorów w pętli for skutkuje dość  długim (i w opinii niektórych - mało czytelnym) kodem. Czasami, programiści ułatwiają sobie życie stosując makro FOREACH:
 
<source lang="cpp">
Linia 154:
</source>
Powyższy kod wyprowadza na standardowe wyjście zwartość  wektora "v".
}}