Standardní knihovny C ++
Standardní knihovna šablon (STL),
Obsah
C ++ přejde na novou úroveň
Pro programátor je STL reprezentován sadou tříd sbírek určených pro konkrétní účely a sadu algoritmů, které s nimi mohou pracovat. Vzhledem k tomu, že všechny komponenty knihoven jsou šablony, mohou být použity pro libovolný typ prvku. 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 bere C ++ kvalitativně na jinou úroveň abstrakce. Nyní programátor není zatížen vytvořením dynamických polí, seznamů, stromů, hashů. Také může zapomenout na programování různých vyhledávacích a traversálních algoritmů. S příchodem STL stačí programátor určit vhodný kontejner a používat jeho členské funkce a algoritmy zpracování.
Komponenty STL jsou schopny pracovat s libovolnými typy dat. To je dosaženo skutečností, že všechny součásti knihovny C ++ jsou šablony, které umožňují použití jakýchkoli typů, pokud jsou schopny provádět potřebné operace. To znamená, že kontejnery a algoritmy jsou zobecněny s ohledem na typy. Tento koncept se nazývá generalizované programování.
Přes změny, které byly zavedeny v jazyce C ++ s příchodem STK, neměli bychom zapomínat, že jazyk je efektivní a univerzální programový nástroj a před jeho vzhled a všechny jeho funkce C ++ konzervovaná (například knihovní systém nebo ctime), a s příchodem STK pouze násobeno.
Součásti knihovny
Stavební bloky knihovny jsou pečlivě strukturované komponenty a jejich debugovaná interakce. Hlavními takovými bloky jsou kontejnery, iterátory a algoritmy. S knihovnou C ++ poskytuje STL úžasnou úroveň flexibility v programování, ale je obtížné pochopit a náročné v době zvládnutí.
Kontejnery
Ve standardní knihovně C ++ se kontejnery používají ke správě sbírek a skládají se z objektů určitého typu. Všechny kontejnery mají sadu kladů a zápočtů. Proto byly vyvinuty různé kontejnery, vhodné pro různé požadavky programů. Kontejnery mohou být pole nebo propojené seznamy. Mohou být také implementovány speciálním klíčem pro každý prvek.
Existují 3 typy kontejnerů:
- Konsekutivní kontejnery. Jsou organizované sbírky. Každý prvek má svou vlastní pozici, která závisí na čase vkládání a nezávisí na hodnotě prvku. Existuje pět typů po sobě jdoucích kontejnerů: pole, vektor, deque, seznam, seznam vpřed.
- Asociativní kontejnery. Jsou také objednány sbírky prvků, ale jejich poloha závisí na hodnotě samotného prvku nebo klíče, jestliže prvky kolekce jsou páry klíče-hodnota. K dispozici jsou 4 standardní asociativní kontejnery: set, multiset, map, multimap.
- Neurčené asociativní kontejnery. V tomto případě hodnota prvků ve sbírce není ovlivněna hodnotou nebo časem vložení prvku do kolekce. Pokud vložíte do kolekce n-tého počtu prvků, jejich pořadí 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 průchodu prvků v kolekci objektů. V tomto případě mohou být kolekce buď kontejnery, nebo jejich podmnožina. Hlavní výhodou iterátorů je, že vytvářejí minimální, dostatečné a univerzální rozhraní pro libovolný typ kontejneru. Například, jedním z cílů je přesunout iterátor na prvky kolekce a není závislá na struktuře sbírky, která může být cokoliv: pole, strom, hash tabulky. Hledání prvků funguje stejně.
Rozhraní samotných iterátorů je podobné práci s ukazateli. Chcete-li například získat iterátor další položku, kterou potřebujete provést operaci „++“, a získat hodnotu prvku, na který iterace je v současné době ukázal, - s operačním „*“. Proto je iterátor podobný jakémukoli inteligentnímu ukazateli.
Algoritmy
Hlavním úkolem algoritmů je zpracování prvků sbírek. Například hledat nebo třídit, měnit nebo používat hodnotu prvku. Algoritmy jsou implementovány na úkor iterátorů. Tento přístup umožňuje vytvořit algoritmus pouze jednou a rozšířit jeho práci na libovolné kontejnery prostřednictvím jediného rozhraní iterátorů.
Pro extrémně složité problémy byl vyvinut mechanismus pro pomocné funkce, které jsou nazývány algoritmy. To poskytuje potřebnou flexibilitu při zvládání konkrétních případů. Například programátor může specifikovat speciální vyhledávací kritérium. S nástupem funkcí lambda existují příležitosti popsat všechny operace prováděné na prvcích kontejnerů, když jsou procházeny. Funkční knihovna C ++ tak představuje velmi flexibilní funkce.
Má STL konflikt s koncepty OOP?
V knihovně C ++ jsou data STL spravována podle tříd kontejnerů a operace jsou řízeny vlastními algoritmy. Ukazuje se, že koncept knihovny STL odděluje data a operace, které jsou v rozporu se zásadami objektově orientované programování, které vyžadují sloučení dat a operací. Existuje však ospravedlnění pro toto. Díky interakci libovolných algoritmů s libovolnými kontejnery iterátory může programátor kombinovat libovolná data s jakýmikoliv operacemi. Tak je vyloučen rozpor s OOP a je dosažena zcela nová úroveň flexibility.
Závěr
STL představuje nový nebo lepší přístup k programování. Počátky knihovny se objevily již dávno. První myšlenky se narodily v letech 1992-1994. A po mnoha letech vývoje byla STL plně integrována do standardu C ++ 11. Knihovna má rozsáhlou funkcionalitu a vynikající flexibilitu, ale je obtížné ji pochopit. Dokumentace se skládá ze stovek webových stránek (například dokumentace na webu Microsoft Visual C ++) a popis obsahuje 1000 stránek knih. Současně je knihovna v aktivním vývoji.
- Bar `Knihovna` (Perm): popis, menu
- Knihovny Kazan: popis, adresy
- Gromovův programátor: jmenování, popis
- Knihovna pojmenovaná podle Lermontova. Penza je zvláště hrdá na novou budovu
- Gorky Library (Tver): Historie a modernita
- Jávové pole řetězců. Třídění pole v jazyce Java. Dvourozměrné pole Java
- Nikitinská knihovna Voroněž: historie stvoření a života instituce dnes
- Regionální vědecká knihovna Vladimíra - pýcha regionu
- Knihovny v Moskvě: nový pohled na obvyklé zařízení
- Druhy algoritmů v informatice: příklady
- Složení na téma Knihovna pro školáky
- Msvcr71 dll: co je to knihovna a jak opravit chybu spojenou s její nepřítomností
- Definice, vlastnosti a typy algoritmů
- Co je DirectX
- Řešení problémů s programováním. Cyklický algoritmus
- Sloučit sdružování: popis fungování algoritmu a rozdíly s jinými typy uspořádání dat
- Použití funkce trim (PHP)
- Seznam všech Zahrnout vysvětlení C na C
- Nejžádanějším povoláním je programátor
- Třídící algoritmy tak, jak jsou
- Co jsou datové struktury?