C++ is een van de krachtigste en meest intimiderende programmeertalen die je als beginner kunt tegenkomen. De reden is vrij eenvoudig. Het vereist veel code om de gewenste output te bereiken. De standaard sjabloonbibliotheek, of STL, kan u helpen dit raadsel op te lossen.

Gezien de hoeveelheid tijd en moeite die het kost bij het schrijven van code voor functies zoals sorteren en zoeken, kan STL u helpen al deze bewerkingen uit te voeren met slechts een enkele regel code. Deze bibliotheek kan enorm nuttig zijn voor het oplossen van problemen en het voorbereiden van technische interviews.

Wat is de standaardsjabloonbibliotheek?

De Standard Template Library, of STL, is een C++-bibliotheek die bestaat uit vooraf gebouwde functies en containers. Het bevat enkele prominente sjabloonklassen voor algemene gegevensstructuren zoals vectoren, stapels, wachtrijen en enkele handige algoritmische functies zoals binair zoeken om het programmeren te vergemakkelijken.

De Standard Template Library in C++ bestaat uit vier componenten:

  1. Algoritmen
  2. containers
  3. Functies
  4. iterators

Laten we de algoritmen en containers eens nader bekijken, aangezien dit de meest gebruikte componenten van de STL zijn.

Algoritmen in STL

De header-bestand is een onderdeel van de STL dat bestaat uit verschillende algoritmische functies die kunnen worden gebruikt in plaats van ze handmatig te coderen. Sommige van de opgenomen algoritmen zijn binair zoeken, sorteren en omkeren, die uiterst nuttig zijn.

Om te beginnen moet u de header in uw C++-bestand. De syntaxis is als volgt:

#include 

Overweeg voor de komende methoden een arrayvariabele met de waarden van {6, 2, 9, 1, 4} als voorbeeld.

int arr[] = {6, 2, 9, 1, 4};

soort()

De soort() functie helpt u bij het sorteren van alle elementen binnen de opgegeven gegevensstructuur in oplopende volgorde. Deze functie heeft twee parameters: de start-iterator en de eind-iterator.

Verwant: Een inleiding tot het samenvoegsorteeralgoritme

Syntaxis:

sorteren (start_iterator, eind_iterator);

Hier is een snel voorbeeld:

sorteren (arr, arr+5);
voor (int i = 0; ik < 5; ik++) {
cout << arr[i] << " ";
}

Uitgang:

1 2 4 6 9

omgekeerde()

De omgekeerde() functie keert de volgorde van elementen in de gespecificeerde datastructuur om. Het accepteert twee parameters: de start-iterator en de eind-iterator.

Syntaxis:

omgekeerd (start_iterator, eind_iterator);

Hier is een kort voorbeeld van de bovenstaande methode:

achteruit (arr, arr+5);
voor (int i = 0; ik < 5; ik++) {
cout << arr[i] << " ";
}

Uitgang:

4 1 9 2 6

*min_element() en *max_element()

De functies *max_element() en *min_element() retourneert respectievelijk de maximale en minimale waarde binnen de opgegeven gegevensstructuur. Beide functies accepteren twee argumenten: de start-iterator en de eind-iterator.

Syntaxis:

*max_element (start_iterator, eind_iterator);
*min_element (start_iterator, eind_iterator);

Laten we eens kijken welke waarden deze functies retourneren wanneer ze worden aangeroepen in de voorbeeldarray:

cout << *max_element (arr, arr+5) << endl;
cout << *min_element (arr, arr+5) << endl;

Uitgang:

9
1

Binaire zoekopdracht()

De Binaire zoekopdracht() methode wordt gebruikt om te bepalen of de opgegeven waarde aanwezig is in de gegevensstructuur of niet. Het accepteert drie argumenten: de start-iterator, de eind-iterator en de waarde die u wilt vinden.

Binair zoeken werkt alleen op gesorteerde gegevensstructuren. Daarom moet u de bellen soort() methode eerst voor de Binaire zoekopdracht() methode.

Syntaxis:

binary_search (start_iterator, end_iterator, value_to_find)

Hier is een demonstratie van deze methode:

sorteren (arr, arr+5);
binaire_zoekopdracht (arr, arr+5, 2)? cout << "Element gevonden": cout << "Element niet gevonden";
binaire_zoekopdracht (arr, arr+5, 7)? cout << "Element gevonden": cout << "Element niet gevonden";

Uitgang:

Element gevonden
Element niet gevonden

tel()

De tel() methode retourneert het aantal keren dat de opgegeven waarde in de gegevensstructuur voorkomt. Er zijn drie argumenten nodig: de start-iterator, de eind-iterator en de te tellen waarde.

Syntaxis:

count (start_iterator, end_iterator, value_to_count);

Hier is een voorbeeld van deze methode:

cout << count (arr, arr+5, 2) << endl;

Uitgang:

1

Containers in STL

Containers zijn de gegevensstructuren waarin objecten en gegevens worden opgeslagen. Vectoren, lijsten, stapels, wachtrijen, sets en kaarten zijn enkele van de voorbeelden waarin gegevens worden opgeslagen volgens het opgegeven primitieve gegevenstype. U kunt deze containers gebruiken door hun respectievelijke headers in het C++-bestand te importeren.

Tijdens het initialiseren van de containervariabele moet u de primitieve gegevens vermelden, zoals: int, char, draad binnen in de <> beugels.

Laten we enkele van deze containers nader bekijken:

Vector

Vectoren zijn dynamische arrays waarvan de grootte kan worden aangepast en waarmee u flexibel kunt werken. Wanneer u een element uit de vector invoegt of verwijdert, wordt de grootte van de vector automatisch aangepast. Dit is vergelijkbaar met de ArrayList-gegevensstructuur op Java.

Syntaxis:

#include 
vector variabele_naam;

Hier zijn enkele belangrijke vectormethoden:

  1. push_back (waarde): Deze methode voegt de gegevens toe aan de vector.
  2. pop_back(): Deze methode verwijdert het laatste element uit de vector.
  3. invoegen (index, waarde): Deze methode voegt nieuwe elementen in vóór het element op de opgegeven positie.
  4. grootte(): Deze methode retourneert de grootte van de vector.
  5. leeg(): Deze methode controleert of de vector leeg is of niet.
  6. voorkant(): Deze methode retourneert de eerste waarde van de vector.
  7. terug(): De back-methode retourneert de laatste waarde van de vector.
  8. bij (index): Deze methode retourneert de waarde op de opgegeven positie.
  9. wissen (index): De wismethode verwijdert elementen uit de gegeven index.
  10. Doorzichtig(): Deze methode wist alle items in de vector.
vector < int > v = { 23, 12, 56, 10 };
v.push_back (5);
v.push_back (25);
v.pop_back();
auto i = v.insert (v.begin() + 1, 7);
cout << "De grootte van de gegeven vector " << v.size() << endl;
if (v.leeg()) {
cout << "Vector is leeg" << endl;
} anders {
cout << "Vector is niet leeg" << endl;
}
cout << "Element op de eerste positie is " << v.front() << endl;
cout << "Element op de laatste positie is " << v.back() << endl;
cout << "Element op de gegeven positie is " << v.at (4) << endl;
v.erase (v.begin() + 1);
voor (int i = 0; ik < v.grootte(); ik++) {
cout << v[i] << " ";
}

Uitgang:

De grootte van de gegeven vector 6
Vector is niet leeg
Element op de eerste positie is 23
Element op de laatste positie is 5
Element op de gegeven positie is 10
23 12 56 10 5

Wachtrij

In de wachtrijgegevensstructuur worden elementen van achteren ingevoegd en van voren verwijderd. Daarom volgt het de FIFO-benadering ("first in, first out").

Syntaxis:

#include 
wachtrij variabele_naam;

Hier zijn enkele belangrijke wachtrijmethoden:

  1. duwen (waarde): Deze methode voegt elementen toe aan de wachtrij.
  2. knal(): Deze methode verwijdert het eerste element van de wachtrij.
  3. grootte(): Deze methode retourneert de grootte van de wachtrij.
  4. voorkant(): Deze methode retourneert het eerste element van de wachtrij.
  5. terug(): Deze methode retourneert het laatste element van de wachtrij.
wachtrij < int > q;
q.duwen (30);
q.druk (40);
q.druk (50);
q.druk (60);
q.druk (70);
cout << "Het eerste element is " << q.front() << endl;
cout << "Het laatste element is " << q.back() << endl;
cout << "De grootte van de wachtrij is " << q.size() << endl;
q.pop();
cout << "Alle elementen van de wachtrij afdrukken" << endl;
while (!q.empty()) {
cout << q.front() << " ";
q.pop();
}

Uitgang:

Het eerste element is 30
Het laatste element is 70
De grootte van de wachtrij is 5
Alle elementen van de wachtrij afdrukken
40 50 60 70

Stapel

Stapelcontainers werken volgens de LIFO-methode. LIFO staat voor "last in, first out". Gegevens worden aan dezelfde kant gepusht en gepoft.

Syntaxis:

#include 
stapelen variabele_naam;

Hier zijn enkele belangrijke stapelmethoden:

  1. duwen (waarde): Deze methode duwt het element in de stapel.
  2. knal(): Deze methode verwijdert het bovenste element van de stapel.
  3. top(): Deze methode retourneert de waarde van het laatste element dat in de stapel is ingevoerd.
  4. grootte(): Deze methode retourneert de grootte van de stapel.
  5. leeg(): Deze methode controleert of de stapel leeg is of niet.
stapel < int > s;
s.push (30);
s.push (40);
s.push (50);
s.push (60);
cout << "De bovenkant van de stapel bevat " << s.top() << endl;
s.pop();
cout << "De bovenkant van de stapel na het uitvoeren van de pop-bewerking: " << s.top() << endl;
cout << "Alle elementen van de stapel afdrukken" << endl;
while (!s.empty()) {
cout << s.top() << " ";
s.pop();
}

Uitgang:

De bovenkant van de stapel bevat 60
De bovenkant van de stapel na het uitvoeren van de pop-operatie: 50
Alle elementen van de stapel afdrukken
50 40 30

Instellen

Setcontainers worden gebruikt om unieke waarden te bevatten en de waarde van het element kan niet worden gewijzigd nadat het in de set is ingevoegd. Alle elementen in de set worden gesorteerd opgeslagen. De set container is vergelijkbaar met de datastructuur instellen in Python.

Syntaxis:

#include 
set variabele_naam;

Hier zijn enkele belangrijke setmethoden:

  1. invoegen (waarde): Deze methode voegt elementen in de set in.
  2. beginnen(): Deze methode retourneert de iterator naar het eerste element van de set.
  3. einde(): Deze methode retourneert de iterator naar het laatste element van de set.
  4. grootte(): Deze methode retourneert de grootte van de set.
  5. leeg(): Deze methode controleert of de set leeg is of niet.
  6. vinden (waarde): Deze methode retourneert de iterator naar het element dat in de parameter is doorgegeven. Als het element niet wordt gevonden, retourneert deze functie de iterator naar het einde van de set.
  7. wissen (waarde): Deze methode heeft het opgegeven element uit de set verwijderd.
stel < int > s in;
s.inzet (20);
s.inzet (30);
s.inzet (40);
s.inzet (50);
s.inzet (60);
s.inzet (60);
s.inzet (60);
auto i = s.begin();
cout << "Element op de eerste positie " << * i << endl;
cout << "De grootte van de set " << s.size() << endl;
s.find (20) != s.end()? cout << "Element gevonden" << endl: cout << "Element niet gevonden" << endl;
wissen (30);
cout << "Alle elementen afdrukken" << endl;
voor (auto i = s.begin(); ik != s.end(); ik++) {
cout << * i << " ";
}

Uitgang:

Element op de eerste positie 20
De grootte van de set 5 "
Element gevonden
Alle elementen afdrukken
20 40 50 60

C++ hoeft niet moeilijk te zijn

Net als bij elke andere vaardigheid, is oefenen essentieel om het meeste uit de STL te halen. Deze containers en algoritmen kunnen u helpen veel tijd te besparen en zijn gemakkelijk te gebruiken. Begin met het oefenen van de bovenstaande voorbeelden en u zult het uiteindelijk ook in uw eigen projecten gaan gebruiken.

Als dit echter de eerste keer is dat u C++ leert, begin dan met het leren van de basis voordat u de STL gaat begrijpen.

E-mail
Hoe u C++-programmering leert: 6 sites om aan de slag te gaan

C++ leren? Hier zijn de beste websites en online cursussen voor C++ voor zowel beginners als ervaren programmeurs.

Lees volgende

Gerelateerde onderwerpen
  • Programmeren
  • Codeerhandleidingen
  • Functionele programmering
Over de auteur
Nitin Ranganath (22 artikelen gepubliceerd)

Nitin is een enthousiaste softwareontwikkelaar en een student computertechniek die webapplicaties ontwikkelt met behulp van JavaScript-technologieën. Hij werkt als freelance webontwikkelaar en schrijft in zijn vrije tijd graag voor Linux en Programmeren.

Meer van Nitin Ranganath

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Nog een stap…!

Bevestig uw e-mailadres in de e-mail die we u zojuist hebben gestuurd.

.