Na co wskazuje iterator zwrócony przez list::end()
Ostatnio zmodyfikowano 2019-04-22 17:25
latajacaryba Temat założony przez niniejszego użytkownika |
Na co wskazuje iterator zwrócony przez list::end() » 2019-04-22 01:19:24 Witam. Było dla mnie oczywiste, że iteratory zwracane zarówno przez end jak i cend zawsze wskazują za ostatni element.
W wektorach było to intuicyjne, rozumiałem to jako wskazywanie dosłownie na miejsce w pamięci, w którym znajdowałby się kolejny element, gdyby istniał (skoro wektor to wewnętrznie zazwyczaj dynamiczna tablica to znalezienie takiego miejsca byłoby możliwe).
Jak jest jednak w przypadku np. listy, w której nie sposób wskazać, gdzie będzie znajdował się kolejny element? Na co wtedy wskazuje takowy iterator?
Być może popełniam jakieś błędy myślowe, wtedy proszę o skorygowanie. I wesołych świąt wszystkim :> |
|
YooSy |
» 2019-04-22 01:58:48 |
|
pekfos |
» 2019-04-22 11:36:41 Jak jest jednak w przypadku np. listy, w której nie sposób wskazać, gdzie będzie znajdował się kolejny element? Na co wtedy wskazuje takowy iterator? |
Iterator end() nie wskazuje na nic, dereferencja takiego iteratora nie jest poprawna. To jest iterator, jaki powinieneś otrzymać gdy zinkrementujesz iterator wskazujący na ostatni element. Można powiedzieć, że "wskazuje na element za końcem", ale jeśli wstawisz element na koniec, ten iterator nie musi wskazywać nagle na ten dodany element, ani nawet być poprawnym iteratorem. Wszystko zależy o jakich iteratorach i kontenerach mowa. w której nie sposób wskazać, gdzie będzie znajdował się kolejny element? |
Powiedzmy, że masz zawsze jeden element więcej ale udajesz że go nie ma. Wtedy zawsze wiesz, gdzie dokładnie będzie następny dodany element. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2019-04-22 15:10:27 Dzięki za odpowiedzi @pekfos Powiedzmy, że masz zawsze jeden element więcej ale udajesz że go nie ma. Wtedy zawsze wiesz, gdzie dokładnie będzie następny dodany element. |
To tylko skrót myślowy czy faktycznie taki element z jakichś powodów (np. właśnie dla iteratora za-końcowego) jest wstawiany ale niewidoczny? |
|
pekfos |
» 2019-04-22 15:50:23 To tylko skrót myślowy czy faktycznie taki element z jakichś powodów (np. właśnie dla iteratora za-końcowego) jest wstawiany ale niewidoczny? |
To korekta twojego błędu myślowego. O iteratorach myśl nie tylko w kontekście kontenerów. Gdy używasz czegoś w rodzaju std::istream_iterator<>, tam iterator " end()" to iterator utworzony konstruktorem domyślnym, a więc bez podania żadnej informacji o sekwencji, którą ma kończyć. Czytałeś może to? Wprowadzenie do standardowych algorytmów |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2019-04-22 17:25:45 Ciekawe, zawsze brałem je właśnie tylko w kontekście kontenerów. Ciekawy artykuł i jeszcze raz dziękuję wszystkim za pomoc :>> |
|
« 1 » |