Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Na co wskazuje iterator zwrócony przez list::end()

Ostatnio zmodyfikowano 2019-04-22 17:25
Autor Wiadomość
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 :>
P-174489
YooSy
» 2019-04-22 01:58:48
https://en.cppreference.com/w​/cpp/container/list/end
Będzie zwracać miejsce za ostatnim elementem listy (najprawdopodobniej będzie to
miejsce, w którym zostanie zapisany ostatni element, dodany np. push_back).
P-174490
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.
P-174491
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?
P-174492
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? » Kurs C++ » Poziom 5Wprowadzenie do standardowych algorytmów lekcja
P-174493
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 :>>
P-174498
« 1 »
  Strona 1 z 1