Sobes.tech
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.