nisfarm.ru

Standardní knihovny C ++

Standardní knihovna šablon (STL),

nebo standardní knihovna šablon, ovlivnila architekturu C ++ a stala se jádrem jazyka. STL je sada univerzálních komponent a moderních vysoce výkonných algoritmů pro správu dat. Díky této knihovně C ++ programátor byly k dispozici nejnovější úspěchy v oblasti datových struktur a efektivních algoritmů bez potřeby detailní znalosti jejich struktury a fungování.

C ++ přejde na novou úroveň

C ++ nová ú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

STL typy kontejnerů

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

C ++ 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

Schéma algoritmu

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.

Interakce součástí STL

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.

Sdílet na sociálních sítích:

Podobné
© 2021 nisfarm.ru