Kezdőoldal » Számítástechnika » Programozás » Mikor érdemes vectort/arraylis...

Mikor érdemes vectort/arraylistet vagy láncolt listát (list/linkedlist) használni?

Figyelt kérdés
Ha jól gondolom, akkor a C++-os std::vector kb. ugyanaz mint a javas arraylist, a C++-os std::list pedig nagyjából ugyanaz, mint a javas linkedlist.

2019. máj. 10. 09:45
 1/2 A kérdező kommentje:
Qt-ben annyi különbséget észrevettem, hogy qlistre nem működik az std::sort, nem tudom, hogy ez a sima std::list esetén is így van-e.
2019. máj. 10. 09:48
 2/2 anonim ***** válasza:
100%

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.

2019. máj. 10. 11:34
Hasznos számodra ez a válasz?

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!