Mikor érdemes vectort/arraylistet vagy láncolt listát (list/linkedlist) használni?
Ez több tényezőtől függ. Mindkét adattárolási módszernek van előnye, hátránya.
Tömb alapú adatszerkezet (std::vector és társai):
+ Közvetlen elérés (indexelés) konstans műveletigényű
+ Kisebb méret, a ráhúzott adatszerkezet saját adattagjain felül (pl méret folyamatos számontartása) kizárólag a tárolt típusnak kell helyet foglalnia.
- Elemek hozzáadása/eltávolítása, tároló méretének módosítása lassú, a teljes tömb újraallokálását igényli (ezt a különböző tároló osztályok azzal ellensúlyozzák, hogy eleve több helyet foglalnak le, így egy esetleges bővítés esetén is elférnek még a memóriába.
- Az adatok folytonosan tárolódnak a memóriában, így nagy mennyiségű adat esetében hosszú, egybefüggő memóriaszeletre van szüksége.
Listaszerkezetek:
+ Elemek hozzáadása/eltávolítása gyorsan működik
+ Az adatot nem kell folytonosan tárolni a memóriában, így nagy mennyiségű adat esetében is könnyen tárolható
- Közvetlen elérés lassú, adott indexű elem eléréséhez végig kell iterálni a listán (ezen lehet segíteni valamelyest pl indextábla létrehozásával, de ez cserébe a lista karbantartását teszi költségesebbé)
- Minden adatelem mellé el kell tárolni egy rá mutató pointert is, így több memóriát igényel (nagyméretű adategységek esetében nem jelentős a mérettöblet, de pl primitív típusok esetében a többszörösére nőhet az adatszerkezet mérete)
Nagyjából ezek a fő szempontok, röviden összefoglalva, ha olyan adatszerkezetről van szó, amit gyakran kívánsz módosítani, elemeket hozzáadni, eltávolítani, és/vagy nem akarsz közvetlenül indexelni benne elemeket, a lista lehet az optimális. Abban az esetben, ha az adatszerkezetet viszonylag ritkán módosítanád, viszont gyakran szeretnél közvetlenül elérni benne elemeket, akkor a tömb lesz a barátod.
Mindezen felül ott van még a harmadik adatszerkezet, az asszociatív tömb (map, dictionary), ami szintén rendelkezik a saját pozitív és negatív vonásaival, de ennek az alkalmazása eléggé eltér a másik kettőtől, nem kifejezetten alternatíva, inkább a saját különálló problémaköréra nyújt emgoldást.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!