vectors stl
Rol van vectoren in STL met voorbeelden.
Tot dusverre hebben we in deze C ++ -serie statische arrays gezien met een vaste grootte.
Als we in het midden van het programma meer elementen in de array moeten opslaan, wordt het onmogelijk en krijgen we zeker de uitzondering ‘out_of_bound’ op het moment dat we proberen elementen op te slaan buiten de array-limieten.
Een oplossing hiervoor is om de array te laten declareren met de maximale capaciteit, zodat we geen enkel probleem zullen vinden bij het opslaan van meer elementen tijdens runtime. Maar deze regeling heeft een ernstig nadeel, namelijk dat we te veel geheugen verspillen.
Bekijk hier de complete C ++ trainingsserie.
Het antwoord op al deze problemen is het gebruik van een dynamische array die zich vanzelf uitbreidt als dat nodig is. STL biedt deze dynamische array in de vorm van een vectorcontainer.
Wat je leert:
- Hoe definiëren we vectoren?
- Een vector in C ++ declareren met de klasse std :: Vector
- Initialiseer Vector
- Vector Iterator
- Vector functies
- Vector Capaciteit
- Vector-modificatoren
- 2D-vector
- Vector voorbeeld
- Gevolgtrekking
- Aanbevolen literatuur
Hoe definiëren we vectoren?
Vectoren zijn dynamische array-containers die het formaat automatisch wijzigen wanneer elementen worden ingevoegd of verwijderd. Opslag van vector wordt afgehandeld door de vectorcontainer zelf.
De elementen in de vector worden op aangrenzende locaties opgeslagen. Net als arrays kunnen vectorelementen ook worden doorlopen en benaderd met iteratoren.
Een vector in C ++ declareren met de klasse std :: Vector
In STL-vectorklasse ‘ std :: vector ’Wordt gedefinieerd onder de kop. Om een vectorcontainer te gebruiken, moeten we deze header dus in ons programma opnemen, zoals hieronder wordt weergegeven:
We kunnen een lege vector declareren zoals hieronder weergegeven:
De bovenstaande regel code zal een vector maken met de elementen van het type integer. Ter nagedachtenis zal dit worden ingedeeld als myvec.
Initialiseer Vector
We kunnen een vector met waarde initialiseren op het moment van declareren.
programma's om cpu en gpu temp te bewaken
Dit gaat als volgt:
In de bovenstaande code declareren we een vector van het type int genaamd myvec die de eerste vijf elementen in de Fibonacci-reeks bevat.
De geheugenlay-out van deze vector zal er als volgt uitzien:
Vector Iterator
Zoals eerder vermeld, gebruiken we iteratoren om sequentieel door de vector te lopen.
Vectoren ondersteunen de volgende iteratorfuncties om door de elementen te lopen:
- beginnen() - Geeft een iterator terug die verwijst naar het eerste element van de vectorcontainer.
- einde () - Geeft een iterator terug die verwijst naar het element dat volgt op het laatste element in de vector.
- rbegin () - Retourneert een omgekeerde iterator die naar het laatste element in de vectorcontainer verwijst.
- render () - Retourneert een omgekeerde iterator die naar het eerste element van de vectorcontainer verwijst.
- cbegin () - Retourneert een constante iterator die naar het eerste element in de vectorcontainer verwijst.
- een paar() - Geeft een constante iterator terug die verwijst naar het element dat volgt op het laatste element van de vectorcontainer.
- crbegin () - Retourneert een omgekeerde constante iterator die naar het laatste element in de vectorcontainer wijst.
- crend () - Retourneert een omgekeerde constante iterator die naar het eerste element in de vectorcontainer wijst.
Laten we eens kijken naar een voorbeeld dat deze iteratorfuncties zou demonstreren.De andere functies kunnen op dezelfde manier worden gebruikt.
Uitgang:
Uitvoer van Vector met begin en einde: 2 3 4 5 6
Uitvoer van Vector met rbegin en rend: 6 5 4 3 2
Uitgangsvector van met cbegin en cend: 2 3 4 5 6
Uitgangsvector van met crbegin en crend: 6 5 4 3 2
Dus in deze code declareren we een vector en voegen we er waarden in met behulp van de push_back-functie. Vervolgens geven we de vectoren weer met behulp van elk van de iteratorfuncties die we hierboven hebben beschreven. Zoals u kunt zien aan de hand van de gebruikte iteratorfuncties, verandert de volgorde waarin de vector wordt weergegeven.
Vector functies
Een vector sorteren
We kunnen STL-algoritmen gebruiken die we al op de vector hebben gezien.
Hieronder wordt een voorbeeld gegeven van het gebruik van ‘Sorteren’ op de vector.
Uitgang:
Originele Vector
10 50 30 20 60 40
Gesorteerde Vector
10 20 30 40 50 60
In het bovenstaande voorbeeld hebben we een vector geïnitialiseerd en vervolgens een sorteeralgoritme toegepast om de vector te sorteren.
Afdrukken van elementen van een vector
Vectoren kunnen worden afgedrukt met behulp van een iterator en ‘cout’ stream. We kunnen een iterator gebruiken om door elk van de vectorelementen te lopen en ze met cout af te drukken.
Het volgende voorbeeld laat dit zien:
Uitgang:
Uitvoer van Vector met begin en einde: 3 4 5 6 7
Vector Capaciteit
Er zijn verschillende functies die op vectoren werken om de grootte, maximale grootte, enz. Te bepalen.
We vermelden de functies zoals hieronder:
(i) Grootte van de vector
De functie size () geeft het aantal elementen in de vectorcontainer terug. Dit is de ingebouwde functie van de klasse std :: vector en kan rechtstreeks worden gebruikt om de grootte van de vector te vinden.
converteer karakter naar int c ++
Laten we een voorbeeld bekijken van een vector met de functie size ():
Uitgang:
Vector Maat: 6
In het bovenstaande programma hebben we een vector myvec gedefinieerd die uit zes elementen bestaat. Vervolgens bellen we de functie size () op myvec en deze geeft de juiste maat weer.
(ii) Het formaat van een vector wijzigen
We kunnen ook het formaat van een vector wijzigen naar de gewenste grootte, zodat deze een ‘n’ aantal elementen kan bevatten. Dit wordt bereikt door de functie ‘resize ()’ van de klasse std :: vector. De resize-functie neemt de grootte van de vector als parameter en wijzigt vervolgens de grootte van de vectorcontainer naar de opgegeven grootte.
Laten we dit begrijpen met behulp van een voorbeeld.
Uitgang:
Vectorelementen zijn: 1 1 2 3 5 8
Vectorgrootte na formaatwijziging: 4
Vectorelementen na het wijzigen van de grootte zijn: 1 1 2 3
In het bovenstaande programma definiëren we in eerste instantie een vector myvec van grootte 6. Vervolgens noemen we de resize-functie op deze vector met size = 4. Dit betekent dat we onze vector nu naar grootte 4 willen verkleinen.
Nadat we de resize-functie hebben aangeroepen, printen we de vector opnieuw. We zien dat wanneer we het formaat van de vector wijzigen naar grootte 4, de resterende elementen worden weggegooid en alleen de 4 elementen van de vector worden weergegeven.
Afgezien van de functies voor grootte en formaat wijzigen, ondersteunt de vectorklasse ook nog enkele functies waarmee we de capaciteit van de vector kunnen manipuleren. Zij zijn:
- max_size (): Retourneert maximale grootte, d.w.z. het maximale aantal elementen dat de vector kan bevatten.
- capaciteit(): Retourneert de grootte van de momenteel toegewezen opslagruimte. Dit wordt geretourneerd in termen van het aantal elementen.
- leeg(): Controleert of de container leeg is.
- shrink_to_fit (): Verkleint de vectorcapaciteit zodat deze past bij de grootte en verwijdert alle andere elementen.
- reserveren(): Reserveert de vectorcapaciteit om n elementen te bevatten.
Vector-modificatoren
Modificatoren zijn bewerkingen of functies die kunnen worden gebruikt om de inhoud van de vectorcontainer te wijzigen. We zullen enkele van de belangrijkste functies zien die als modificatoren worden gebruikt.
Nieuwe waarden toewijzen aan vector
Een van de modificatiefuncties van std :: vector is de toewijzingsfunctie. De functie Toewijzen wijst nieuwe waarden toe aan vector door de oude te vervangen.
Dit wordt aangetoond in het volgende voorbeeld.
Uitgang:
De vectorelementen: 10 10 10 10 10
In de bovenstaande code declareren we een vector van het type int. Vervolgens roepen we om een functie toe te kennen met parameters 5, 10. Dit betekent dat we van plan zijn om element 10 5 keer aan de vector toe te wijzen. Als we de vector weergeven, zien we dat de vector 5 elementen heeft, allemaal met waarde 5.
Een Vector wissen
De volgende functie die door std :: vector wordt geboden om een vector te wijzigen, is de functie ‘wissen’. De functie Erase verwijdert de elementen uit het opgegeven bereik of een positie uit de vector.
Laten we eens kijken naar een voorbeeld van de wisfunctie.
Uitgang:
Vectorelementen: 1 1 2 3 5
Vectorgrootte na wissen: 4
Vector na wisbewerking: 1 2 3 5
Zoals getoond in de bovenstaande uitvoer voor de functie voor het wijzigen van de grootte, specificeren we het bereik of de positie van het element dat moet worden gewist of verwijderd. In het bovenstaande voorbeeld hebben we de positie gespecificeerd die naar het eerste element in de vector verwijst.
Voeg elementen in de vector in
De vectorklasse std :: vector biedt nog een andere functie om waarden in de vector in te voegen. Met de functie Invoegen kunnen we elementen in de vector invoegen vóór de opgegeven positie.
Dit zal duidelijk worden met het volgende voorbeeld
Uitgang:
Eerste vector: 2 3 4
Nieuwe vector na insert: 20 30 2 3 4
Het bovenstaande programma declareert aanvankelijk een vector met 3 elementen. Vervolgens roepen we de invoegfunctie twee keer aan om waarden 20 en 30 respectievelijk op de eerste en tweede positie in de vector in te voegen. Vervolgens laten we de gewijzigde vector zien.
Vector-inhoud omwisselen
De vectorklasse biedt ons ook de mogelijkheid om de inhoud van de ene vector te wisselen of uit te wisselen met die van een andere vector van hetzelfde type en dezelfde grootte. Dit wordt bereikt door de vector ingebouwde functie ‘swap’.
Beschouw het volgende stuk code.
Uitgang:
Vector 1: 1 3
Vector 2: 5 7
Na Swap
Vector 1: 5 7
Vector 2: 1 3
De bovenstaande code toont de inhoud van twee vectoren voor en na het omwisselen.
Wissen van waarden in de vector
In tegenstelling tot het verwijderen van een of meer elementen uit de vector door gebruik te maken van de wisfunctie, hebben we een andere functie ‘Wissen’ waarmee we alle elementen in de vectorcontainer kunnen verwijderen.
In het onderstaande programma demonstreren we een duidelijke functie van de vectorcontainer.
Uitgang:
Grootte van vector v1: 4
Vector 1: 1 3 5 7
Grootte van vector v1 na oproep om functie te wissen: 0
Hier declareren we eerst een vector en duwen er vervolgens elementen in. Zodra we de functie clear () aanroepen, zien we dat alle elementen in de vector in één keer worden verwijderd.
bij (pos)
Deze functie retourneert de verwijzing naar het element op positie ‘pos’ in de vector.
Dit is een van de functies die wordt gebruikt om toegang te krijgen tot het vectorelement.
Hieronder wordt een voorbeeld gegeven:
c ++ sleep_for
Uitgang:
Element op positie 3: 3
Zoals in het voorbeeld wordt getoond, wordt de functie ‘at’ gebruikt om toegang te krijgen tot het element in de vector op de opgegeven positie.
Voorkant
Functie ‘front’ retourneert de verwijzing naar het eerste element van de vector. Dit is nog een andere functie die we gebruiken om toegang te krijgen tot de elementen van de vectorcontainer.
Het volgende voorbeeld toont het gebruik van de ‘front’ -functie.
Uitgang:
Invoer vector: 1 1 2 3 5 8
Element aan de voorkant van vector: 1
Terug
Net als bij de 'front'-functie, wordt de back-functie gebruikt om toegang te krijgen tot het laatste element van de vectorcontainer. De functie ‘terug’ retourneert een verwijzing naar het laatste element in de vectorcontainer.
Het volgende voorbeeld toont het gebruik van de ‘terug’ functie.
Uitgang:
Invoer vector: 1 1 2 3 5 8
Element aan de achterkant van vector: 8
Zoek een element in de vector
De functie ‘vind’ wordt gebruikt om te zoeken of een bepaald element (ook wel sleutel genoemd) in de vector aanwezig is of niet. Deze functie zou snel en efficiënt moeten zijn. Zodra de waarde is gevonden, keert de functie terug.
Het volgende voorbeeld toont het gebruik van de zoekfunctie.
Uitgang:
Invoer vector: 1 1 2 3 5 8
Voer de sleutel in die moet worden gezocht: 0
Element niet gevonden
2D-vector
Tweedimensionale vector wordt ook wel ‘Vector of Vector” genoemd. Net als tweedimensionale arrays worden ook elementen van tweedimensionale vectoren in de matrixvorm gerangschikt.
Een voorbeeldprogramma voor 2D-vector wordt hieronder gegeven.
Uitgang:
2D-vector:
1 3 5
7 9 11
13 15 17
Let in het bovenstaande voorbeeld op de manier waarop de 2D-vector wordt gedefinieerd. Het wordt gedefinieerd als een vector in een andere vector. Bij het weergeven van deze 2D-vector gebruiken we dezelfde benadering als bij het weergeven van 2D-arrays.
Vector voorbeeld
Hieronder wordt een vectorvoorbeeld gegeven dat de meeste vectorbewerkingen bevat.
Uitgang:
De vectorelementen: 10 10 10 10 10
De nieuwe vector na push_back: 10 10 10 10 10 5
Nieuwe vector na pop_back: 10 10 10 10 10
Nieuwe vector na insert: 20 10 10 10 10 10
Vectorgrootte na wissen: 5
Na het wissen van het eerste element: 10 10 10 10 10
Hieronder volgt de schermafbeelding voor hetzelfde.
In het bovenstaande voorbeeld declareren we een vector en gebruiken we de functies assign en push_back om elementen in de vector in te voeren. Vervolgens gebruiken we de functie pop_back om een element aan het einde van de vector te verwijderen. Daarna voegen we opnieuw een element toe aan de vector met behulp van het insert-element en vervolgens wissen we het element met de wisfunctie.
Dit is een end-to-end-voorbeeld van de vectorcontainer die zijn verschillende functies laat zien.
Gevolgtrekking
Hiermee zijn we aan het einde gekomen van deze tutorial over vector.
In onze aanstaande tutorial zullen we leren over de ‘lijst’ container van STL die vergelijkbaar is met de lijnen van arrays en vectoren.
Bekijk hier de perfecte C ++ trainingsgids.