Takie porównanie było też u Zelenta; mówił on, że tablica to biblioteczka do której trzeba wstawać i podchodzić, co zajmuje czas, a stos leży na biurku i szybciej sie z niego korzysta. |
Fragment filmu mówił (chyba) o stosie w sensie stosu wywołań (
esp), a chodzenie do książek miało chyba symbolizować cache miss. Może to gdzieś jeszcze dodatkowo wyjaśnił, ale gdyby widz się tego nie domyślił i zasugerował tytułem filmu, to w zasadzie zostają bzdury.
No cóż, skoro nie jest szybszy to w czym jest lepszy od tablicy, skoro możemy odczytywać tylko ostatni element z góry? |
Stos to koncept, nie zamiennik tablicy. Jak sobie zobaczysz adapter
std::stack<>, to zobaczysz że można do niego wstawić dowolny kontener zgodny z STL, ale będziesz mieć do dyspozycji tylko metody typu
push(),
pop(),
empty(). To takie wymuszanie, że trzymasz się konceptu. W praktyce to jak ze wzorcami projektowymi, dostosowujesz do potrzeb i często narusza się wymaganie używania tylko elementu z wierzchu stosu. Stos wywołań to taki przykład, który zawsze nazywa się 'stosem', nikt tego inaczej nie nazywa, ale poza rozkazami realizującymi typowe operacje stosowe, możesz ze stosu korzystać jak normalnego obszaru pamięci i nie znajdziesz kodu, który by tego nie robił.
Jeśli jednak koniecznie chcesz porównywać tablicę ze stosem, to chociaż zdefiniuj dokładnie, co masz na myśli pod tymi terminami. Tablica
int tab[123]; napisana w funkcji znajduje się na stosie (wywołań), więc to stos, czy tablica? Stos jest często realizowany jako ciągły obszar pamięci, czyli jako tablica, ale to jednak stos..
Struktura danych, to nie coś co występuje w próżni. Zawsze musisz to połączyć z jakimś algorytmem, choćby to była tylko dereferencja adresu z offsetem, jak w przypadku tablicy. Na tablicy możesz zrobić stos, dodając jedną zmienną kontrolną, kolejkę (2 zmienne opisujące bufor cykliczny), drzewo (tablica węzłów wiązanych między sobą, albo coś w stylu stogu, gdzie powiązania węzłów to arytmetyka na indeksach). Tą tablicę teraz sobie 'rzuć na biurko' i bądź teraz mądry i porównuj.