Kezdőoldal » Számítástechnika » Programozás » C++: A lista hogy foglal...

C++: A lista hogy foglal helyet a memóriában? Ahány elem annyi felé van szétszórva?

Figyelt kérdés
2015. márc. 18. 21:20
1 2
 1/12 anonim ***** válasza:
Most tömbre vagy vektorra gondolsz?
2015. márc. 18. 21:35
Hasznos számodra ez a válasz?
 2/12 anonim ***** válasza:

std::vector - egymást követően

std::list - szétszórva

2015. márc. 18. 21:43
Hasznos számodra ez a válasz?
 3/12 anonim ***** válasza:
50%

Attól függ az a lista hogyan van implementálva.

Ha tömbként akkor a teljes tömb egyszerre kerül lefoglalásra. Ha láncolt listaként akkor a lista elemek hozzáadáskor kerülnek lefoglalásra, tehát nem szükségszerű hogy egymás mellé kerülnek.

2015. márc. 18. 23:56
Hasznos számodra ez a válasz?
 4/12 anonim ***** válasza:
Ez nem a list-től függ, hanem az allocator template paramétertől. Ha úgy valósítod meg, akkor nem egyesével foglalja le az elemeknek a helyet. A list beszúrásra és törlésre van optimizálva, míg a vector ebben lassabb.
2015. márc. 19. 17:52
Hasznos számodra ez a válasz?
 5/12 iostream ***** válasza:

#4 "míg a vector ebben lassabb."


Erre azért ne vegyél mérget. Nagyon sok esetben, sőt, az esetek többségében a vector veri a listát.

2015. márc. 20. 16:13
Hasznos számodra ez a válasz?
 6/12 anonim ***** válasza:

iostream:


Arról van szó, ha a vector-ban a 0. elem elé be akarsz szúrni egy elemet, akkor eggyel arrébb másolod az összes utána lévő elemet. Míg a láncolt listánál, csak bekötöd a helyére. Ha végigolvasod a vector-t az gyorsabb mert nincs indirekció(pointer). Használat szerint lesz gyorsabb vagy lassabb.

2015. márc. 20. 18:40
Hasznos számodra ez a válasz?
 7/12 A kérdező kommentje:

Második válaszolónak köszönöm!


"Arról van szó, ha a vector-ban a 0. elem elé be akarsz szúrni egy elemet, akkor eggyel arrébb másolod az összes utána lévő elemet."

A listánál meg a beszúrás helyére kell iterálnod, ami szintén idő. Innentől nem egyértelmű, hogy melyik lesz gyorsabb beszúrás szempontjából.

2015. márc. 21. 12:38
 8/12 iostream ***** válasza:
#6 És ha kiméred, az esetek többségében még így is sokkal gyorsabb lesz a vector. Persze ha egy GiB adatot kell arrébb tolni, az lassú lesz. De nem ez a jellemző.
2015. márc. 23. 11:18
Hasznos számodra ez a válasz?
 9/12 anonim ***** válasza:

iostream:


Kimérve is lassabb a vector, legalábbis ebben az esetben. Nem kell GiB-nyi adat hozzá.


[link]

2015. márc. 23. 17:33
Hasznos számodra ez a válasz?
 10/12 iostream ***** válasza:

Ebben az esetben? Én azt látom, hogy az oldal engem igazol: a vector tipikusan a leggyorsabb, nagyméretű adatoknál (ahol már sokat kell szüttyögni), ott valóban lelassul a vector. A leggyakoribb vector a vector<int>, ott a list minden szempontból lassabb.

Persze aki 4 kB-os adatot nem pointerrel tárol vectorban, az valamit nagyon eltervezett.

2015. márc. 25. 09:30
Hasznos számodra ez a válasz?
1 2

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!