Vektor i C++ Standard skabelonbibliotek (STL) med eksempel
โก Smart opsummering
Vektor i C++ er et dynamisk array fra Standard Template Library, der automatisk รฆndrer stรธrrelse, nรฅr elementer tilfรธjes eller fjernes, og lagrer elementer i sammenhรฆngende hukommelse, sรฅ programmรธrer kan tilgรฅ og gennemgรฅ dem ved hjรฆlp af iteratorer.

Hvad er en C++ Vektor?
A C++ Vector er et dynamisk array, der er i stand til automatisk at รฆndre stรธrrelsen pรฅ sig selv. รndringen af โโstรธrrelsen sker efter et element er blevet tilfรธjet eller slettet fra vektoren. Opbevaringen hรฅndteres automatisk af containeren. Elementerne i en vektor lagres i sammenhรฆngende lager. Dette tillader C++ programmรธrer til at fรฅ adgang til og krydse vektorelementerne ved hjรฆlp af iteratorer.
Indsรฆttelse af nye data i en vektor sker i dens slutning. Dette tager en differentiel tid. Fjernelse af et element fra en vektor tager konstant tid. ร rsagen er, at der ikke er behov for at รฆndre stรธrrelsen pรฅ vektoren. Indsรฆttelse eller sletning af et element i begyndelsen af โโvektoren tager lineรฆr tid.
Fรธr man skriver kode med vektorer, er det nyttigt at vide, hvornรฅr de er den rette beholder at rรฆkke ud efter.
Hvornรฅr skal man bruge en vektor?
A C++ vektor skal bruges under fรธlgende omstรฆndigheder:
- Nรฅr man beskรฆftiger sig med dataelementer, der รฆndrer sig konsekvent.
- Hvis datastรธrrelsen ikke er kendt fรธr starten, krรฆver vektoren ikke, at du angiver containerens maksimale stรธrrelse.
Sรฅdan initialiseres vektorer i C++
Syntaksen af โโvektorer i C++ er:
vector <data-type> name (items)
Som vist ovenfor begynder vi med vektornรธgleordet.
- datatype er datatypen for de elementer, der skal gemmes i vektoren.
- navn er navnet pรฅ vektoren eller dataelementerne.
- Varer angiver antallet af elementer for vektordataene. Denne parameter er valgfri.
Nรฅr en vektor eksisterer, giver iteratorer dig en pointer-lignende mรฅde at bevรฆge dig pรฅ tvรฆrs af dens elementer.
Iteratorer
Formรฅlet med iteratorer er at hjรฆlpe os med at fรฅ adgang til de elementer, der er gemt i en vektor. Det er et objekt, der fungerer som en pointer. Her er de almindelige iteratorer, der understรธttes af C++ vektorer:
- vektor::begynd(): det giver en iterator, der peger pรฅ det fรธrste element i vektoren.
- vektor::end(): det giver en iterator, der peger pรฅ elementet forbi slutningen af โโvektoren.
- vektor::cbegin(): Det er det samme som vector::begin(), men det har ikke muligheden for at รฆndre elementer.
- vektor::cend(): Det er det samme som vector::end(), men kan ikke รฆndre vektorelementer.
Det fรธlgende eksempel udfylder en vektor og gennemgรฅr den derefter med bรฅde muterbare og konstante iteratorer.
Eksempel 1
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; for (int a = 1; a <= 5; a++) nums.push_back(a); cout << "Output from begin and end: "; for (auto a = nums.begin(); a != nums.end(); ++a) cout << *a << " "; cout << "\nOutput from cbegin and cend: "; for (auto a = nums.cbegin(); a != nums.cend(); ++a) cout << *a << " "; return 0; }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluder iostream-header-filen i vores kode. Det giver os mulighed for at lรฆse fra og skrive til konsollen.
- Inkluder vektorheader-filen i vores kode. Det vil give os mulighed for at arbejde med vektorer i C++.
- Inkluder std-navnerummet for at bruge dets klasser og funktioner uden at kalde det.
- Kald funktionen main() hvori programmets logik skal tilfรธjes.
- { markerer starten pรฅ hoveddelen af โโfunktionen main().
- Erklรฆr en vektor ved navn nums for at gemme et sรฆt heltal.
- Opret en for-lรธkke, der kan hjรฆlpe os med at iterere over vektoren. Variablen vil hjรฆlpe os med at iterere over vektorelementerne, fra det fรธrste til det femte element.
- Skub elementer ind i vektornummeret bagfra. For hver iteration vil dette tilfรธje den aktuelle vรฆrdi af variabel a til vektoren, som er 1 til 5.
- Udskriv noget tekst pรฅ konsollen.
- Brug en iteratorvariabel a til at iterere over elementerne i vektornumre fra begyndelsen til elementet forbi slutningen. Bemรฆrk, at vi bruger vector::begin() og vector::end() iteratorer.
- Udskriv de vรฆrdier, der peges pรฅ af iteratorvariabel a pรฅ konsollen for hver iteration.
- Udskriv noget tekst pรฅ konsollen. \n er et nyt linjetegn, der flytter markรธren til den nye linje for at udskrive derfra.
- Brug en iteratorvariabel til at iterere over elementerne i vektornumre fra begyndelsen til fortidens slutning-element. Bemรฆrk, at vi bruger iteratorerne vector::cbegin() og vector::cend().
- Udskriv de vรฆrdier, der peges pรฅ af iteratorvariabel a pรฅ konsollen for hver iteration.
- Hovedfunktionen skal returnere en vรฆrdi, hvis programmet kรธrer korrekt.
- Slutningen af โโhoveddelen af โโfunktionen main().
modifiers
Modifikatorer bruges til at รฆndre betydningen af โโden angivne datatype. Her er de almindelige modifikatorer i C++:
- vektor::push_back(): Denne modifikator skubber elementerne fra bagsiden.
- vektor::indsรฆt(): Til indsรฆttelse af nye elementer i en vektor pรฅ et bestemt sted.
- vektor::pop_back(): Denne modifikator fjerner vektorelementerne fra bagsiden.
- vektor::slet(): Det bruges til at fjerne en rรฆkke elementer fra den angivne placering.
- vektor::clear(): Det fjerner alle vektorelementerne.
Det nรฆste eksempel anvender disse modifikatorer i rรฆkkefรธlge for at se, hvordan en vektor รฆndrer sig.
Eksempel 2
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; nums.assign(5, 1); cout << "Vector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.push_back(2); int n = nums.size(); cout << "\nLast element: " << nums[n - 1]; nums.pop_back(); cout << "\nVector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.insert(nums.begin(), 7); cout << "\nFirst element: " << nums[0]; nums.clear(); cout << "\nSize after clear(): " << nums.size(); }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
- Inkluder vektorhovedfilen i vores kode for at bruge dens funktioner.
- Inkluder std-navneomrรฅdet for at bruge dets klasser uden at kalde det.
- Kald funktionen main(). Programlogikken skal tilfรธjes inde i dens krop.
- Starten pรฅ hoveddelen af โโfunktionen main().
- Deklarer en vektor ved navn nums for at gemme nogle heltalsvรฆrdier.
- Gem 5 elementer i vektornumrene. Hver med en vรฆrdi pรฅ 1.
- Udskriv noget tekst pรฅ konsollen.
- Brug en iteratorvariabel a til at iterere over elementerne i vektornumre.
- Udskriv vรฆrdierne af vektornumre pรฅ konsollen for hver iteration.
- Tilfรธj vรฆrdien 2 til slutningen af โโvektortallene.
- Deklarer en heltalsvariabel n for at gemme stรธrrelsen af โโvektortallene.
- Udskriv den sidste vรฆrdi af vektornumre sammen med anden tekst. Det burde returnere en 2.
- Fjern det sidste element fra vektornumrene. De 2 vil blive fjernet.
- Udskriv tekst pรฅ konsollen. \n flytter markรธren til den nye linje for at udskrive teksten der.
- Brug en iteratorvariabel a til at iterere over elementerne i vektornumre.
- Udskriv vรฆrdierne af vektornumre pรฅ konsollen for hver iteration.
- Indsรฆt vรฆrdien 7 i begyndelsen af โโvektortallene.
- Udskriv den fรธrste vรฆrdi af vektornumre sammen med anden tekst. Den skulle vende tilbage 7.
- Slet alle elementer fra vektornumrene.
- Udskriv stรธrrelsen af โโvektornummeret sammen med anden tekst efter at have ryddet alt indhold. Det burde returnere 0.
- Slutningen af โโhoveddelen af โโfunktionen main().
Kapacitet
Brug fรธlgende funktioner at bestemme en vektors kapacitet:
- Stรธrrelse() โ Den returnerer antallet af elementer i en vektor.
- Max_size() โ Den returnerer det hรธjeste antal elementer, som en vektor kan gemme.
- Kapacitet() โ Den returnerer den mรฆngde lagerplads, der er allokeret til en vektor.
- รndre stรธrrelse() โ Den รฆndrer stรธrrelsen pรฅ containeren, sรฅ den indeholder n elementer. Hvis vektorens strรธmstรธrrelse er stรธrre end n, fjernes de bagerste elementer fra vektoren. Hvis vektorens strรธmstรธrrelse er mindre end n, tilfรธjes ekstra elementer bagest i vektoren.
- Tom() โ returnerer sand, hvis en vektor er tom. Ellers returnerer den falsk.
Dette sidste eksempel rapporterer og justerer lagringen af โโen vektor ved hjรฆlp af ovenstรฅende kapacitetsfunktioner.
Eksempel 3
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vector1; for (int x = 1; x <= 10; x++) vector1.push_back(x); cout << "Vector size: " << vector1.size()<< endl; cout << "Vector capacity: " << vector1.capacity() << endl; cout << "Maximum size of vector: " << vector1.max_size()<< endl; vector1.resize(5); cout << "Vector size after resizing: " << vector1.size() << endl; if (vector1.empty() == false) cout << "Vector is not empty"<<endl; else cout << "Vector is empty"<<endl; return 0; }
Output:
Her er et skรฆrmbillede af koden:
Code Forklaring:
- Inkluder iostream-headerfilen i vores kode for at bruge dens funktion.
- Inkluder vektorhovedfilen i vores kode for at bruge dens funktioner.
- Inkluder std-navneomrรฅdet i vores kode for at bruge dets klasser uden at kalde det.
- Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
- Opret en vektor ved navn vektor1 for at gemme heltal.
- Brug en for-lรธkke til at oprette variabel x med vรฆrdier fra 1 til 10.
- Skub vรฆrdierne af variabel x ind i vektoren.
- Udskriv stรธrrelsen af โโvektoren sammen med anden tekst pรฅ konsollen.
- Udskriv vektorens kapacitet sammen med anden tekst pรฅ konsollen.
- Udskriv det maksimale antal elementer, vektoren kan indeholde sammen med anden tekst pรฅ konsollen.
- Tilpas stรธrrelsen pรฅ vektoren til kun at indeholde 5 elementer.
- Udskriv den nye stรธrrelse af vektoren sammen med anden tekst.
- Kontroller, om vektoren ikke er tom.
- Udskriv tekst pรฅ konsollen, hvis vektoren ikke er tom.
- Brug en else-sรฆtning til at angive, hvad du skal gรธre, hvis vektoren er tom.
- Tekst, der skal udskrives pรฅ konsollen, hvis vektoren er tom.
- Programmet skal returnere vรฆrdi efter vellykket afslutning.
- Slutningen af โโhoved() funktionsteksten.





