Junior
V čem spočívá rozdíl mezi kontejnery vector a list v C++?
sobes.tech AI
Odpověď od AI
std::vector představuje dynamické pole. Data jsou uložena v souvislém bloku paměti.
Výhody vector:
- Rychlý přístup podle indexu (O(1)).
- Dobrá lokalita dat, což je užitečné pro cache procesoru.
- Rychlé přidávání/odstraňování na konec (průměrně O(1)).
Nevýhody vector:
- Složitost při vkládání/mazání na libovolném místě (O(n)).
- Přerozdělení paměti při růstu, což vyžaduje kopírování prvků.
std::list je obousměrně propojený seznam. Každý prvek obsahuje ukazatele na předchozí a následující prvek.
Výhody list:
- Složitost při vkládání/mazání kdekoli (O(1)) po nalezení pozice (která může být O(n)).
- Nevyžaduje souvislý blok paměti.
Nevýhody list:
- Pomalejší přístup podle indexu (O(n)).
- Zabírá více paměti na prvek (kvůli ukazatelům).
- Špatná lokalita dat.
Hlavní rozdíl:
| Vlastnost | std::vector |
std::list |
|---|---|---|
| Datová struktura | Dynamické pole | Obousměrně propojený seznam |
| Uložení dat | Souvislý blok paměti | Uzly s ukazateli |
| Přístup podle index | O(1) | O(n) |
| Vkládání/mazání | O(n) (kromě na konci) | O(1) (po iterátoru) |
| Lokalita dat | Dobrá | Špatná |
| Paměťová náročnost | Elementy | Elementy + ukazatele |
Volba mezi vector a list závisí na typických operacích s kontejnerem. Pokud jsou časté náhodný přístup a vkládání/mazání na konci, je vhodnější vector. Pokud jsou důležité časté vkládání/mazání uprostřed seznamu, je vhodnější list.