STL/Iteratory/Kontenery

STL/Iteratory/Kontenery
B2
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:68
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.

MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:2 minuty
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


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
B2
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 5 lat
  • Postów:68
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 ?

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:2 minuty
  • Postów:4932
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.


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.