Standard Template Library: Porovnání verzí

Smazaný obsah Přidaný obsah
m Překlepy
m typo, čeština
Řádek 1:
'''Standard Template Library''' ('''STL''') je softwarová knihovna jazyka [[C++]], která výrazně ovlivnila mnoho částí standardní knihovny C++. STL poskytuje čtveřici komponent - algoritmy, kontainery, funkční objekty (objekty, které mohou být volány jako funkce) a iterátory. Knihovna STL by měla být dodávána s každým překladačem jazyka C++.
Standardní knihovny C++. STL poskytuje čtveřici komponent - algoritmy, kontainery, funkční objekty (objekty, které mohou být volány jako funkce) a iterátory. Knihovna STL by měla být dodávána s každým překladačem jazyka C++.
 
STL poskytuje soubor základních tříd jazykujazyka [[C++]], jako jsou kontainerykontejnery či [[asociativní pole]], které mohou pracovat s libovolnými datovými typy, ať už vestavěnými (int, bool,...) nebo uživatelsky definovanými datovými strukturami, za předpokladu, že umožňují jisté základní operace (jako kopírování či přiřazení). STL algoritmy jsou nezávislé na kontejnerech, což značně snižuje složitost knihovny.
 
Základním mechanismem knihovny STL jsou šablony. Díky tomuto řešení je možné dosáhnout polymorfismu řešeného v rámci kompilace (compile-time polymorfismus). Ten je obvykle efektivnější než tradiční run-time polymorfismus. Moderní kompilátory jsou navíc přizpůsobeny k minimalizaci negativních následků abstrakce plynoucích z masivního použití STL.
Řádek 12 ⟶ 11:
=== Kontejnery ===
 
STL obsahuje sekvenční kontejnery, asociativní kontejnery a kontejnerové adaptéry. Standardní sekvenční kontejnery nahrnujízahrnují vektor (vector), dequeobousměrnou (obousměrnáfrontu fronta(deque) a seznam (list). Standardní asociativní kontejnery jsou set, multiset, bitset, map a multimap. Kontejnerové adaptéry představují třídy queue, priority_queue, a stack. Kontejnerové adaptéry nepředstavují doslova třídy kontejnerů, jde pouze o třídy, které poskytují specifické rozhraní a funkčně spoléhají na některý z kontejnerů.
 
{| class="wikitable"
! Kontejner
! Kontajner
! Popis
|-
Řádek 26 ⟶ 25:
|-
! vector
| Vector reprezentuje [[Dynamickédynamické pole]], které podobně jako běžné pole jazyku C umožňuje okamžitý přístup k libovolnému prvku. VectorVektor je schopen automaticky měnit svou velikost, je-li do něj vložen či z něj odebrán prvek. Tato schopnost samozřejmě vyžaduje jistý režijní výpočetní čas. Vložení či vyjmutí do/z vrcholu (zadní části) vectoruvektoru zabere amortizovaný konstantní čas. VládáníVkládání či mazání ze začátku či z prostředku vectoruvektoru má pak lineární časovou náročnost.
Existuje optimalizace vectoru proPro datový typ bool existuje optimalizace vektoru, která umožňuje hodnoty uchovávat po jednotlivých bitech.
|-
! list
| [[Obousměrný seznam]], elementyprvky nejsou uchovávány v celistvém bloku paměti, ale každý elementprvek obsahuje adresu elementuprvku předchozího a následujícího. Co do efektivity je na tom listseznam opačně než vectorvektor - pomalé vyhledávání a přístup k prvkům (lineární náročnost), ale rychlé vkládání/ a mazání prvků (konstantní čas).
|-
! deque''' (''double-ended [[fronta (datová struktura)|queue]]'')
Řádek 38 ⟶ 37:
|-
! [[fronta (datová struktura)|queue]]
| Kontejner reprezentuje [[Fronta_(datová_struktura)|FIFO frontu]] s využitím operací push/pop/front/back. Jakýkoliv sekvenční kontejner zahrnující funkce front(), back(), push_back(), and pop_front() být použit také jako fronta "queue" (např. list nebo deque).
|-
! priority_queue
| KontajnerKontejner reprezentuje prioritní frontu s využitím operací push/pop/top (prvek s nejvyšší prioritou je na vrcholu "top"). Jakýkoliv sekvenční kontajnerkontejner s přístupem k libovolnéímulibovolnému prvku (random-access), který zahrnuje funkce front(), push_back() a pop_back(), může být použit také jako fronta "priority_queue" (např. vector nebo deque). Prvky kontejneru mohou také podporovat porovnávání (pro určení prvku s vyšší prioritou).
front(), push_back() a pop_back() může být použit také jako fronta "priority_queue" (např. vector nebo deque).
Prvky kontejneru mohou také podporovat porovnávání (pro určení prvku s vyšší prioritou).
|-
! [[Zásobník_(datová_struktura)|stack]]
| Kontejner reprezentuje LIFO [[Zásobník_(datová_struktura)|zásobník]] s využitím operací push/pop/top (naposledy přidaný prvek je na vrcholu "top"). Jakýkoliv sekvenční kontejner, který zahrnuje funkce back(), push_back() a pop_back() může být použit také jako zásobník "stack" (např. vector, list nebo deque).
Jakýkoliv sekvenční kontejner, který zahrnuje funkce back(), push_back() a pop_back() může být použit také jako zásobník "stack" (např. vector, list nebo deque).
|-
! colspan=2| [[asociativní kontejnery|Asociativní kontejnery]]
Řádek 55 ⟶ 51:
|-
! multiset
| Množina stejněstejná jako set, navíc umožňuje duplikování prvků.
|-
! map