Aktywne Wpisy


LubiePieski +10
moja profesjonalna opinia kulinarna jest taka że kuchnia azjatycka jest najlepsza na świecie nie ma o czym dyskutować kuchnia włoska jest taka se ale i tak lepsza od polskiej bo polska kuchnia jest najgorsza
Skopiuj link
Skopiuj link

Wykop.pl
Taka randomowa rozkmina mnie naszła a nie mogę znaleźć odpowiedzi nigdzie na stacku i w ogóle we internetach.
Mianowicie chodzi mi o pojedynek std::vector vs std::list.
Vector ma ciągły obszar pamięci, więc on sobie po prostu alokuje kolejne tablice i przepisuje w trakcie działania. Dramat przy dodawaniu dużej liczby elementów, ale przy odczycie będzie spoko.
Lista to totalny pamięciowy burdel dodający elementy pojedynczo i gdzie popadnie, gdzie tylko jest miejsce. Nie możemy jej przeglądać dowolnie, bo obszar jest nieciągły. Wynika z tego, że każdy kolejny element listy powinien posiadać wskaźnik na element następny i element poprzedni, bo możemy przecież iterować od przodu i od tyłu. Ale to oznacza dodanie do każdej wartości przechowywanej dwóch wartości long long int, które mają aż 64 bity. Czy to nie oznacza, że lista może przy przechowywaniu tej samej ilości danych zajmować nawet kilka razy tyle pamięci co vector przez przechowywanie samych wskaźników na kolejne elementy?
gdzie Listnodebase to
Czyli dwa pointery i dane.
std::vectorbędzie zawsze lepszą opcją, ale nie jest tak w praktyce. Często nie można sobie pozwolić na alokację dużego kawałku ciągłej pamięci, albo na trzymanie go z dala innych danych. Dlatego powstają klasy takie jak SmallVector.Taka ciekawostka: backend kompilatora vistual c++ korzysta praktycznie wszędzie z linked