Standardní knihovny C ++

Standardní knihovna šablon (STL) nebo knihovna standardních šablon ovlivnila architekturu C ++ a stala se jádrem jazyka. STL je sada univerzálních komponent a pokročilých vysoce výkonných algoritmů pro správu dat. Díky tomuto programu knihovny C ++ se staly dostupné pokročilé výsledky v oblasti datových struktur a efektivních algoritmů bez nutnosti detailního pochopení jejich struktury a práce.

C ++ jde na novou úroveň

Pro programátor je STL reprezentován sadou tříd sbírek určených pro určené účely a sadou algoritmů, které s nimi mohou pracovat. Vzhledem k tomu, že všechny komponenty knihovny jsou šablony, mohou být použity pro všechny typy prvků. Knihovna navíc umožňuje vytvářet vlastní třídy a algoritmy, které mohou pracovat společně s existujícími.


Tento přístup k organizaci práce s daty a algoritmy zobrazuje C + + na kvalitativně odlišné úrovni abstrakce. Nyní programátor není zatížen vytvořením dynamických polí, seznamů, stromů, hashů. Může také zapomenout na programování různých algoritmů pro vyhledávání a obejití. S příchodem programátora STL stačí určit příslušný kontejner a používat jeho členské funkce a algoritmy zpracování. Komponenty STL jsou schopny pracovat s libovolnými datovými typy. Toho je dosaženo skutečností, že všechny součásti knihovny C ++ jsou šablony, které umožňují používat libovolné typy, pokud jsou schopny provádět požadované operace. To znamená, kontejnery a algoritmyobecně s ohledem na typy. Tento koncept se nazývá generické programování.


Přes změny, které byly zavedeny v jazyce C ++ s příchodem STK, nezapomeňte, že se jedná o efektivní a univerzální programovací nástroj a jeho vzhled a všechny jeho funkce C ++ zachovány (například knihovnu systém nebo čas) a s násobením výskytu STL.

Složky Library

Stavební bloky knihovny jsou pečlivě strukturované prvky a jejich nedostatek spolupráce. Hlavními takovými bloky jsou kontejnery, iterátory a algoritmy. Knihovna C ++ STL poskytuje úžasnou flexibilitu v programování, ale je to těžké pochopit a časově náročné zvládnout.

Kontejnery

Standardní knihovna C ++ kontejnery použity k řízení odběru a skládají z objektů určitého typu. Všechny kontejnery mají řadu výhod a nevýhod. Proto jsou různé kontejnery navrženy tak, aby vyhovovaly různým požadavkům, které programy nabízejí. Kontejnery mohou být pole nebo propojené seznamy. Mohou být také implementovány pomocí speciálního klíče pro každou položku. Existují 3 typy kontejnerů:
  • Kontejnerové kontejnery. Jsou to objednané sbírky. Každá položka má svůj vlastní pozici, která je závislá na době zavedení a nezávisí na hodnotě položky. Sekvenční kontejnery z 5 odrůd: pole, vektor, deque, seznam, seznam vpřed.
  • Asociativní kontejnery. Jedná se také o uspořádanou sbírku položek, ale jejich pozice závisí na hodnotěsamotný prvek nebo klíč, pokud prvky kolekce jsou dvojice klíč-hodnota. K dispozici jsou 4 standardní asociativní kontejnery: set, multiset, map, multimap.
  • Nesrovnané asociativní kontejnery. V tomto případě pořadí prvků ve sbírce neovlivní ani hodnotu, ani čas vložení prvku do kolekce. Pokud do této sbírky vložíte n-tý počet položek, jejich objednávka bude nepředvídatelná. Navíc se může časem změnit. Neurčené kontejnery jsou: neřízená sada, neuspořádaná multiset, neuspořádaná mapa, neřízená multimap.
  • Iterátory

    Jedná se o mechanismy, které se používají k obcházení prvků v kolekci objektů. V tomto případě mohou být kolekce oba kontejnery a jejich podmnožina. Hlavní výhodou iterátorů je, že vytvářejí minimální, dostatečné a všestranné rozhraní pro každý typ kontejneru. Například jednou z úkolů iterátorů je přesunout prvky kolekce a nezávisí na struktuře této kolekce, což může být cokoliv: pole, strom, hash tabulka. Výběr položek pracuje stejným způsobem.
    Rozhraní samotných iterátorů je podobné práci s ukazateli. Například pro získání iterátoru dalšího prvku musíte provést operaci "++" a získat hodnotu prvku, který v tomto okamžiku indikátor indikuje, - operace "*". Iterátor je tedy podobný druhu intelektuálního ukazatele.

    Algoritmy

    Hlavním úkolem algoritmů je zvládnout prvky sbírek. Například vyhledávat nebo třídit, upravovat nebo používat hodnoty položek.Algoritmy jsou implementovány na úkor iterátorů. Tento přístup umožňuje vytvořit algoritmus pouze jednou a rozšiřovat jeho práci na libovolné kontejnery kvůli jedinému rozhraní iterators. Mechanismus pomocných funkcí způsobený algoritmy je vyvinut pro extrémně složité úkoly. To poskytuje potřebnou flexibilitu při zvládání konkrétních případů. Například programátor může požádat o konkrétní vyhledávací kritérium. S nástupem funkcí lambda existovaly příležitosti pro popis jakýchkoli operací prováděných na prvcích kontejnerů při výměně. Takže knihovna funkcí C ++ je velmi flexibilní.

    Na rozdíl od koncepcí STO PLO?

    V knihovně C ++ jsou data STL řízena třídami kontejnerů a operace jsou konfigurovány pomocí algoritmů. Ukazuje se, že koncept knihovny STL dělí data a operace, což je v rozporu se zásadami objektově orientovaného programování, které vyžadují sloučení dat a operací. Je to však výmluva. Díky interakci libovolných algoritmů s libovolnými kontejnery prostřednictvím iterátorů může programátor kombinovat jakákoli data s jakýmikoliv operacemi. Tím je vyloučen rozpor s OOP a dosaženo zcela nové úrovně flexibility.

    Závěr

    STL je nový nebo lepší přístup k programování. Počátky knihovny se objevily již dávno. První myšlenky vznikly v letech 1992-1994. A po mnoha letech vývoje se stal STL plně integrován do standardu C ++ 11. Knihovna má velkou funkčnost a velkou flexibilitu, ale s tímtěžké pochopit. Dokumentace obsahuje stovky webových stránek (například dokumentaci na webu knihovny Microsoft Visual C ++) a kniha obsahuje 1000+ stránek popisu. V tomto případě je knihovna v aktivním vývoji.

    Související publikace