Előadások c

C / C ++ előadások: Standard Sablonkönyvtár (STL)

A kapitány nyilvánvalósága szerint:
Az STL egy módja a programozásnak, tipikus algoritmusok nélkül

Az STL egy standard sablonkönyvtár, amelyet a C ++ szabvány új verziói tartalmaznak. Az STL szabványos osztályokat és funkciókat kínál, amelyek végrehajtják a legnépszerűbb és legelterjedtebb algoritmusokat és adatstruktúrákat. Az STL osztály sablonok alapján készült. ezért a benne foglalt algoritmusok és struktúrák szinte minden adatra alkalmazhatók. A könyvtár magja három elemből áll: konténerekből, algoritmusokból és iterátorokból.
  • A konténerek (konténerek) olyan elemek, amelyek elemek tárolására szolgálnak. Például vektor, lineáris lista, készlet. Az asszociatív tárolók lehetővé teszik a billentyűk használatát, hogy gyorsan hozzáférjenek a benne tárolt értékekhez. Minden konténerosztály meghatároz egy funkciókészletet a velük történő munkavégzéshez. A listatartály például olyan elemek beillesztésére, törlésére és egyesítésére szolgál.
  • Az algoritmusok (algoritmusok) a konténer tartalmát végrehajtják. Vannak algoritmusok a tartály tartalmának inicializálására, rendezésére, keresésére és cseréjére. Számos algoritmust úgy terveztek meg, hogy egy sorozatot dolgozzon ki, amely a tartály belsejében lévő elemek lineáris listája.
  • Iterátorok (iterátorok) olyan tárgyak, amelyek a tartály felé mutatnak. Lehetővé teszik, hogy hozzáférjenek egy tároló tartalmához, és elemezzék az elemeit, mintha a mutatókat egy tömb elemeihez lehetne használni. Az iterátorokkal ugyanúgy dolgozhat, mint a mutatókkal. Számukra használhatja a műveleteket *, növekmény, csökkentés. Az iterátor típus különböző tartályokban van meghatározva.

Az iterátorok öt típusa létezik:







1. A bemenet Iterátorai (input iterátor) támogatják az egyenlőség, a dereferencing és a növekmény műveleteit: ==. =, * i, ++ i, i ++, * i ++. Egy bemeneti iterátor speciális esete az istream_iterator.

2. Kimeneti iterátoros támogatási dereferencing műveletek, amelyek csak a hozzárendelés bal oldalán érvényesek, és növekmény: ++ i, i ++, * i = t, * i ++ = t. A kimeneti iterátor speciális esete az ostream_iterator.

3. Az egyirányú iterátorok (forward iterátor) támogatják az I / O iterátorok összes műveletét, és emellett lehetővé teszik a hozzárendelés használatát: == korlátozás nélkül. =, =, * i, ++ i, i ++, * i.

4. A kétirányú iterátor rendelkezik a továbbító iterátorok tulajdonságaival, és rendelkezik egy további csökkentési művelettel (-i, i--, * i--), amely lehetővé teszi számukra, hogy mindkét irányba haladjanak a tartályon.







Az STL támogatja a fordított iterátorokat is. A fordított iterátorok lehetnek kétirányú iterátorok vagy véletlenszerű hozzáférési iterátorok, amelyek a sorrendet fordított irányban haladják meg.

A konténerek, algoritmusok és iterátorok mellett az STL számos további szabványos összetevőt támogat.

A legfontosabbak a memória-kiosztók, predikátumok és összehasonlító funkciók.

Minden tárolónak van saját elosztója, amely kezeli a konténer kiosztási eljárását. Alapértelmezés szerint az allokátor az osztályelosztó objektuma. Meghatározhatja saját forgalmazóját.

Néhány algoritmus és konténer egy speciális típusú funkciót használ, amelyet predikátumnak hívnak. A predikátum lehet unáris és bináris. A predikátum visszatérési értéke igaz vagy hamis. Ez vagy az érték megszerzésének pontos feltételeit a programozó határozza meg. Az UnPred, bináris - BinPred unary predikátumok típusa. Az argumentumok típusa megfelel a tárolóban tárolt objektumok típusának.

A bináris predikátum speciális típusa két elem összehasonlítására szolgál. Ez az összehasonlítási funkció. A függvény igaz értéket ad vissza, ha az első elem kisebb, mint a második. A funkció típusának típusa Comp:

Az STL-ben különleges szerepet játszanak a funkció objektumok (függvények). A függvényobjektumok azok az osztályok, amelyekben a "zárójelek" () művelet meg van határozva. Bizonyos esetekben célszerű a funkciót az objektumfunkcióval helyettesíteni. Ha egy funkció objektumot használunk függvényként, akkor a () operátort hívjuk. Itt egy teljes példa a kód végrehajtására ezt a megközelítést.

Példa 1. Sorok eltávolítása listáról a funktort használva.

Az STL két alap típusú konténert határoz meg: szekvenciák és asszociatív tárolók. A különbség az, hogy a szekvenciáknak ugyanazok az elemek sorrendje (vektor, stack, sor), valamint az asszociatív tárolókhoz - nem (asszociatív tömb, készlet).

A szabványos konténerek kulcsfontosságú elgondolása, hogy cserélhetőnek kell lenniük, ha ésszerű a probléma megoldása. A felhasználó választhat a konténerek között, a hatékonysági megfontolások és a speciális műveletek szükségessége alapján. Például ha gyakran kell keresni egy kulcsot, használhatja az asszociatív tömb térképet. Másrészt, ha a lista-specifikus műveletek érvényesülnek, használhatja a lista-listatartályt. Ha a tartály elején vagy végén szokásos elemeket ad hozzá vagy távolít el, célszerű a sor várakozási sorát, a dupla kettős sorát vagy a veremköteget használni. Alapértelmezés szerint a felhasználó tipikusan a vektortartályt használja, és a feladatok széles skálájához jól működik.

A különböző típusú konténerek egységes kezelése az általános programozás fogalmához vezet. Ennek az elképzelésnek a támogatása érdekében az STL sok készen álló általános algoritmust tartalmaz. Az ilyen algoritmusok enyhítik a programozót az egyedi tárolók belső elrendezésének részleteiről.

Röviden leírjuk az STL főbb jellemzőit, a standard segítségről vagy a cplusplus.com webhelyről többet tudhat meg.

Az STL vektori vektora dinamikus tömbként van definiálva, amely az elemek indexhez való hozzáférését jelenti.

ahol T a tárolandó adatok típusa. Az Allocator megadja a memóriaelosztót, amely alapértelmezés szerint az alapértelmezett. A vektorosztály a következő konstruktorokat határozza meg:

Példák erre a konstruktorra:

A vektorral való együttműködésre vonatkozó általános elvek a következők:
  • A vektorban tárolt minden objektum esetében meg kell határozni az alapértelmezett konstruktort. Ezenkívül az objektumnak meg kell határoznia az operátor címkék: c ++ oktatási



Kapcsolódó cikkek