STL/Iteratory/Kontenery

0

Siemka mam pytanie, dosyć mocno teoretyczne. Dlaczego w przypadku niektórych kontenerów musimy korzystać z iteratora? Czy wynika to z kierunkowości kontenera, np listy czy też jest spowodowane jakąś inną specyfikacją danego kontenera? Czy też po prostu dany obsługa danego kontenera jest możliwa tylko za pomocą listy ze względu na jej usprawnienie i nie ma większych powodów.

0

std::vector działa na jednym kawałku pamięci. Tu kolejność elementów jest zdefiniowana pozycją w pamięci
std::list std::map i wiele innych działają na wielu małych połączonych wskaźnikami fragmentach pamięci. Tu kolejność elementów jest zdefiniowana połączaniami między elementami.
jest jeszcze std::input stream iterator std::output stream iterator, które są powiązane ze strumieniami

0
MarekR22 napisał(a):

std::vector działa na jednym kawałku pamięci. Tu kolejność elementów jest zdefiniowana pozycją w pamięci
std::list std::map i wiele innych działają na wielu małych połączonych wskaźnikami fragmentach pamięci. Tu kolejność elementów jest zdefiniowana połączaniami między elementami.
jest jeszcze std::input stream iterator std::output stream iterator, które są powiązane ze strumieniami

Czyli po prostu musimy się posługiwać iteratorami po list i map ze względu na to że działają one na wskaźnikach ?

1

Dają możliwość napisania ładnego, generycznego kodu; Przekazujesz między funkcjami/metodami iteratory, a nie obiekty konkretnych typów (funkcje nie muszą "wiedzieć", co otrzymują).
Korzystanie z indeksów (bo chyba to Masz na myśli), jest skuteczne jeśli długość kolekcji oraz random access są w stałym czasie - tak jest dla wektora, ale dla std::list już nie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1