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.

- Rejestracja:ponad 17 lat
- Ostatnio:2 minuty
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
- Rejestracja:ponad 6 lat
- Ostatnio:ponad 5 lat
- Postów:68
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 jeszczestd::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 ?

- Rejestracja:około 8 lat
- Ostatnio:2 minuty
- Postów:4932
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.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.