Standardne C ++ biblioteke

Standardne knjižnice C ++

Standardna knjižnica predložaka (STL) ili standardna knjižnica predložaka utjecala je na C ++ arhitekturu i postala jezgra jezika. STL je skup univerzalnih komponenti i naprednih algoritama upravljanja podacima visokih performansi. Zahvaljujući C ++ bibliotekarskom programeru, dostupna su napredna dostignuća na području podatkovnih struktura i učinkovitih algoritama bez potrebe za detaljnim razumijevanjem njihove strukture i rada.

C ++ ide na novu razinu

Za programera, STL je predstavljen skupom klasa zbirki namijenjenih za određene svrhe i skupom algoritama koji mogu raditi s njima. Zbog činjenice da su sve komponente knjižnice predlošci, mogu se koristiti za bilo koji tip elementa. Osim toga, knjižnica omogućuje izgradnju vlastitih klasa i algoritama koji mogu raditi zajedno s postojećim.


Ovaj pristup organiziranju rada s podacima i algoritmima prikazuje C + + na kvalitativno različitoj razini apstrakcije. Sada programer nije opterećen stvaranjem dinamičkih nizova, popisa, drveća, hashesa. On također može zaboraviti programiranje različitih algoritama za pretraživanje i zaobilaženje. S dolaskom STL programera dovoljno je odrediti odgovarajući spremnik i koristiti njegove članske funkcije i algoritme za obradu. STL komponente mogu raditi s proizvoljnim tipovima podataka. To se postiže činjenicom da su sve komponente biblioteke C ++ predlošci koji vam omogućuju da koristite bilo koju vrstu ako su sposobni za obavljanje potrebnih operacija. To jest, spremnici i algoritmigeneralizirani s obzirom na tipove. Ovaj koncept naziva se generičko programiranje.


Unatoč promjenama uvedenim u C ++ s pojavom STL-a, ne smije se zaboraviti da je jezik bio učinkovit i višenamjenski programski alat i prije njegovog izgleda, kao i sve njegove značajke spremljene na C ++ (npr. Knjižnica sustav ili ctime) i uz pojavu STL samo umnožiti.

Knjižnične komponente

Sastavnice knjižnice su dobro strukturirane komponente i njihova dobro funkcionirajuća interakcija. Glavni takvi blokovi su spremnici, iteratori i algoritmi. S ++, STL knjižnica pruža nevjerojatnu razinu fleksibilnosti programiranja, ali je teško razumljiva i zahtjevna prije vremena razvoja.

Kontejneri

U standardnoj C ++ knjižnici, kontejneri se koriste za upravljanje zbirkama i sastoje se od objekata određene vrste. Svi spremnici imaju niz prednosti i nedostataka. Stoga su različiti spremnici dizajnirani tako da odgovaraju različitim zahtjevima koje nude programi. Spremnici mogu biti nizovi ili povezani popisi. Mogu se implementirati i pomoću posebnog ključa za svaku stavku. Postoje 3 vrste spremnika:
  • Konsekutivni spremnici. Oni su uređene zbirke. Svaka stavka ima svoju poziciju, koja ovisi o vremenu umetanja i ne ovisi o vrijednosti elementa. Sekvencijski spremnici od 5 varijeteta: niz, vektor, deque, popis, popis naprijed.
  • Asocijativni spremnici. To je ujedno i uređena zbirka predmeta, ali njihov položaj ovisi o vrijednostisam element ili ključ ako su elementi zbirke par ključ /vrijednost. Postoje 4 standardna asocijativna spremnika: set, multiset, karta, multimap.
  • Neuređeni asocijativni spremnici. U tom slučaju, redoslijed elemenata u zbirci ne utječe ni na vrijednost ni na vrijeme umetanja elementa u zbirku. Ako u ovu zbirku unesete n-ti broj stavki, njihov će redoslijed biti nepredvidljiv. Štoviše, tijekom vremena može se promijeniti. Neuređeni spremnici su: neuređen skup, neuređeni multiset, neuređena karta, neuređeni multimap.
  • Iteratori

    To su mehanizmi koji se koriste za zaobilaženje elemenata u zbirci objekata. U ovom slučaju, zbirke mogu biti i spremnici i njihov podskup. Glavna prednost iteratora je da stvaraju minimalno, dostatno i svestrano sučelje za bilo koju vrstu spremnika. Na primjer, jedan od zadataka iteratora je premještanje elemenata zbirke i ne ovisi o strukturi ove zbirke, koja može biti bilo što: niz, stablo, hash-tablica. Izbor stavki radi na isti način.
    Sučelje samih iteratora slično je radu s pokazivačima. Na primjer, da biste dobili iterator sljedećeg elementa, morate izvesti operaciju "++" i dobiti vrijednost elementa, koji u trenutku kada iterator pokazuje, - operaciju "*". Tako je iterator sličan nekoj vrsti intelektualnog pokazivača.

    Algoritmi

    Glavni zadatak algoritama je rukovanje elementima zbirki. Na primjer, potražite ili razvrstajte, izmijenite ili koristite vrijednosti stavke.Algoritmi se implementiraju na račun iteratora. Ovaj pristup vam omogućuje da napravite algoritam samo jednom i proširite njegov rad na bilo koji spremnik zbog jednog sučelja iteratora. Mehanizam pomoćnih funkcija uzrokovanih algoritmima razvijen je za iznimno složene zadatke. Time se osigurava potrebna fleksibilnost za rješavanje određenih slučajeva. Primjerice, programer može tražiti određeni kriterij pretraživanja. S pojavom lambda funkcija, postojale su mogućnosti za opisivanje svih operacija koje se izvode na elementima spremnika kada su zamijenjene. Stoga je biblioteka C ++ funkcija vrlo fleksibilna.

    Suprotno STL konceptima PLO-a? U biblioteci C ++, STL podaci se kontroliraju kontejnerskim klasama, a operacije konfiguriraju algoritmi. Ispostavlja se da koncept STL knjižnice dijeli podatke i operacije, što je u suprotnosti s načelima objektno orijentiranog programiranja, koje zahtijevaju spajanje podataka i operacija. Međutim, to je izgovor. Zbog interakcije bilo kojih algoritama s bilo kojim kontejnerom preko iteratora, programer može kombinirati sve podatke s bilo kojim operacijama. Na taj se način eliminira proturječje s OOP-om i postiže se potpuno nova razina fleksibilnosti.

    Zaključak

    STL je novi ili poboljšani pristup programiranju. Počeci knjižnice pojavili su se davno. Prve ideje nastale su u razdoblju 1992-1994. I nakon mnogo godina razvoja, STL je postao potpuno integriran u C ++ 11 standard. Knjižnica ima veliku funkcionalnost i veliku fleksibilnost, ali s timteško razumjeti. Njegova dokumentacija uključuje stotine web stranica (na primjer, dokumentaciju na web-mjestu Microsoft Visual C ++ knjižnice), a knjiga sadrži 1000 stranica opisa. U ovom slučaju knjižnica se aktivno razvija.

    Povezane publikacije