Weboldalunk cookie-kat használhat, hogy megjegyezze a belépési adatokat, egyedi beállításokat, továbbá statisztikai célokra és hogy a személyes érdeklődéshez igazítsa hirdetéseit. További információ

Főoldal Belépés/Regisztráció Egy véletlen kérdés Facebook






Kategória: Számítástechnika » Programozás

A kérdés

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

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.

Keress kérdéseket hasonló témákban: C++, Java, programozás, std::vector, std::list, ArrayList

  máj. 10. 09:45  Privát üzenet  

A válasz
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.

# 1/2Időpont máj. 10. 09:48 Privát üzenet

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.



A válasz 100%-ban hasznosnak tűnik. A válaszíró 80%-ban hasznos válaszokat ad.
# 2/2Időpont máj. 10. 11:34 Privát üzenet
Hasznos számodra ez a válasz?

Értesítsünk róla, ha új válasz érkezik? Válasz küldése



Kapcsolódó kérdések
Érdemes 16 évesen elkezdeni otthon programozni?
Melyik programnyelvet érdemes és egyben könnyű is megtanulni ha freelancer munkákat szeretnék vállalni?
C++ programozást szeretném megtanulni. Milyen könyvet ajánlotok hozzá, amiből érdemes lehet tanulni?
C#-ban mikor érdemes property-t és mikor simán statikus adattagot használni?
And vagy or kapcsolatú feltételeknél érdemes valószínűség szerint sorbarendezni a feltételeket mert úgy gyorsabb lesz?
Érdemes programozással foglalkoznom, ha bonyolultabb adatszerkezeteket nem értek és az OOP programozást se tudom megérteni?

Kérdések a Számítástechnika rovatbólKérdések a Programozás rovatból








Minden jog fenntartva © 2019, www.gyakorikerdesek.hu | GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | WebMinute Kft. | 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!