Top Qs
Tijdlijn
Chat
Perspectief

Standard Template Library

softwarebibliotheek voor C++ Van Wikipedia, de vrije encyclopedie

Remove ads

De Standard Template Library of STL is een softwarebibliotheek voor de programmeertaal C++ die deel uitmaakt van de C++ Standard Library. De bibliotheek definieert een groot aantal standaard templates voor het afhandelen van algemene taken, zoals containers, iteratoren en algoritmes.

Beschrijving

De STL bestaat uit een kant en klare set van veel gebruikte klassen, zoals containers en associatieve arrays. Door middel van het templatesysteem van C++ kunnen deze klassen gebruikt worden voor zowel ingebouwde types als eigen gedefinieerde types, zolang ze een aantal elementaire operaties toelaten (zoals kopiëren en toewijzen). Ook deel van de STL is een aantal standaard algoritmes, waaronder sorteren en binair zoeken, die onafhankelijk zijn van de container waarin de datatypes worden opgeslagen.

Doordat de STL het templatesysteem van C++ gebruikt, levert het polymorfisme op compilatieniveau, wat in veel gevallen efficiënter is dan traditioneel run-time polymorfisme. Moderne C++ compilers houden rekening met extra abstractie, waardoor de kosten voor het gebruik van STL minimaal zijn.

De STL was de eerste softwarebibliotheek die gebruik maakte van generieke algoritmes en datastructuren, waarbij uitgegaan werd van vier ideeën:

  • Generiek programmeren
  • Abstractie zonder verlies van efficiëntie
  • De Von Neumann-architectuur
  • Value semantiek (dit houdt in dat waarden gekopieerd worden in plaats van dat er referenties gekopieerd worden)
Remove ads

Geschiedenis

De standaard bibliotheek van C++ is gebaseerd op een versie van STL zoals deze gepubliceerd is door Silicon Graphics, Inc. De gestandaardiseerde STL en de oorspronkelijke STL van Silicon Graphics, inc. verschillen echter op kleine punten; beide implementeren een aantal functionaliteiten die niet aanwezig zijn in de andere versie. Ook bestaat de STL versie van SGI enkel uit een set van header-bestanden, terwijl de ISO C++ standaard zowel implementatie van STL in header-bestanden als in een library-bestand toelaat.

Remove ads

Inhoud van de bibliotheek

Samenvatten
Perspectief

Containers

De STL bestaat uit sequentiële containers en associatieve containers. Veel gebruikte sequentiele containers zijn vector, deque en list. De associatieve containers zijn onder andere set, multiset, map en multimap.

Meer informatie Container, Beschrijving ...

Iteratoren

Een iterator levert ongeveer dezelfde basisfunctionaliteit als pointers, maar levert extra generalisatie door het abstraheren van de container waar de data in opgeslagen zit. De STL implementeert vijf verschillende type iteratoren, invoeriteratoren (deze kunnen alleen gebruikt worden voor het sequentieel lezen van waarden), uitvoeriteratoren (deze kunnen alleen gebruikt worden voor het sequentieel schrijven van waarden), voorwaartse iteratoren (deze kunnen worden gelezen, beschreven en in voorwaartse richting verplaatst worden), bidirectionele iteratoren (als voorwaartse iteratoren, maar kunnen ook verplaatst worden in achterwaartse richting) en random access iteratoren (deze kunnen vrijuit meerdere stappen in beide richtingen verplaatst worden in één operatie).

Algoritmes

Een groot deel van de algoritmes waarmee operaties zoals zoeken en sorteren geïmplementeerd worden, zijn deel van de STL. Ieder algoritme is specifiek geïmplementeerd voor de verschillende iteratortypes, waardoor het algoritme toegepast kan worden op iedere container die een bepaald iteratortype levert.

Functors

De STL bevat klassen die de functieoperator (operator()) overloaden. Deze klassen worden functors of functie-objecten genoemd. Deze kunnen gebruikt worden om functies een toestand te geven. Ook normale pointers naar functies kunnen gebruikt worden als functor.

Remove ads

Kritiek

Eisen aan de compiler

De gebruiksvriendelijkheid van de STL wordt in grote mate bepaald door de kwaliteit van de gebruikte C++ compiler:

  • Foutmeldingen die betrekking hebben op templates hebben de neiging om erg lang en moeilijk te ontcijferen te worden. Dit probleem wordt zo groot bevonden dat er enkele hulpprogramma's geschreven zijn die STL-gerelateerde foutmeldingen simplificeren en indenteren. Ook is er een voorstel voor de C++ standaard (genaamd concept checking) die dit probleem probeert te reduceren.
  • Onzorgvuldig gebruik van de STL templates kan leiden tot code bloat.
  • Het compileren van C++ met templates leidt tot verhoogde compilatietijd en geheugengebruik, soms zelfs magnituden hoger.
Remove ads

Referenties

Remove ads

Zie ook

  • Boost: een grote collectie van C++ bibliotheken die portable zijn en gecontroleerd worden op kwaliteit. Sommige bibliotheken van Boost worden toegevoegd in de volgende revisie van de C++ standaard.
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads