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.

  • ๐Ÿ“ฆ Dynamisk array: A C++ Vektoren vokser eller krymper automatisk, i modsรฆtning til et statisk array med fast stรธrrelse.
  • ๐Ÿงฉ Header og syntaks: Inkluder vektoroverskriften, og deklarer derefter vektoren navn til at gemme typede elementer.
  • ๐Ÿงญ Iteratorer: begin(), end(), cbegin() og cend() bevรฆger sig hen over vektorelementer som pointere.
  • ๐Ÿ› ๏ธ Modifikatorer: push_back(), insert(), pop_back(), erase() og clear() รฆndrer vektorindholdet.
  • ๐Ÿ“ Kapacitet: size(), capacity(), max_size(), resize() og empty() rapporterer eller justerer lagerplads.
  • ๐Ÿค– AI assistance: GitHub Copilot og lignende AI-assistenter understรธtter vektoroperationer fra en kort kommentar.

C++ Vektor STL

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:

C++ vektor iteratorer Eksempel 1 output

Her er et skรฆrmbillede af koden:

C++ vektor iteratorer Eksempel 1 kode

Code Forklaring:

  1. Inkluder iostream-header-filen i vores kode. Det giver os mulighed for at lรฆse fra og skrive til konsollen.
  2. Inkluder vektorheader-filen i vores kode. Det vil give os mulighed for at arbejde med vektorer i C++.
  3. Inkluder std-navnerummet for at bruge dets klasser og funktioner uden at kalde det.
  4. Kald funktionen main() hvori programmets logik skal tilfรธjes.
  5. { markerer starten pรฅ hoveddelen af โ€‹โ€‹funktionen main().
  6. Erklรฆr en vektor ved navn nums for at gemme et sรฆt heltal.
  7. 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.
  8. 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.
  9. Udskriv noget tekst pรฅ konsollen.
  10. 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.
  11. Udskriv de vรฆrdier, der peges pรฅ af iteratorvariabel a pรฅ konsollen for hver iteration.
  12. Udskriv noget tekst pรฅ konsollen. \n er et nyt linjetegn, der flytter markรธren til den nye linje for at udskrive derfra.
  13. 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().
  14. Udskriv de vรฆrdier, der peges pรฅ af iteratorvariabel a pรฅ konsollen for hver iteration.
  15. Hovedfunktionen skal returnere en vรฆrdi, hvis programmet kรธrer korrekt.
  16. 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:

C++ Vektormodifikatorer Eksempel 2 output

Her er et skรฆrmbillede af koden:

C++ Vektormodifikatorer Eksempel 2 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i vores kode for at bruge dens funktioner.
  2. Inkluder vektorhovedfilen i vores kode for at bruge dens funktioner.
  3. Inkluder std-navneomrรฅdet for at bruge dets klasser uden at kalde det.
  4. Kald funktionen main(). Programlogikken skal tilfรธjes inde i dens krop.
  5. Starten pรฅ hoveddelen af โ€‹โ€‹funktionen main().
  6. Deklarer en vektor ved navn nums for at gemme nogle heltalsvรฆrdier.
  7. Gem 5 elementer i vektornumrene. Hver med en vรฆrdi pรฅ 1.
  8. Udskriv noget tekst pรฅ konsollen.
  9. Brug en iteratorvariabel a til at iterere over elementerne i vektornumre.
  10. Udskriv vรฆrdierne af vektornumre pรฅ konsollen for hver iteration.
  11. Tilfรธj vรฆrdien 2 til slutningen af โ€‹โ€‹vektortallene.
  12. Deklarer en heltalsvariabel n for at gemme stรธrrelsen af โ€‹โ€‹vektortallene.
  13. Udskriv den sidste vรฆrdi af vektornumre sammen med anden tekst. Det burde returnere en 2.
  14. Fjern det sidste element fra vektornumrene. De 2 vil blive fjernet.
  15. Udskriv tekst pรฅ konsollen. \n flytter markรธren til den nye linje for at udskrive teksten der.
  16. Brug en iteratorvariabel a til at iterere over elementerne i vektornumre.
  17. Udskriv vรฆrdierne af vektornumre pรฅ konsollen for hver iteration.
  18. Indsรฆt vรฆrdien 7 i begyndelsen af โ€‹โ€‹vektortallene.
  19. Udskriv den fรธrste vรฆrdi af vektornumre sammen med anden tekst. Den skulle vende tilbage 7.
  20. Slet alle elementer fra vektornumrene.
  21. Udskriv stรธrrelsen af โ€‹โ€‹vektornummeret sammen med anden tekst efter at have ryddet alt indhold. Det burde returnere 0.
  22. 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:

C++ Vektorkapacitet Eksempel 3 output

Her er et skรฆrmbillede af koden:

C++ vektorkapacitet Eksempel 3 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i vores kode for at bruge dens funktion.
  2. Inkluder vektorhovedfilen i vores kode for at bruge dens funktioner.
  3. Inkluder std-navneomrรฅdet i vores kode for at bruge dets klasser uden at kalde det.
  4. Kald funktionen main(). Programlogikken skal tilfรธjes i denne funktions brรธdtekst.
  5. Opret en vektor ved navn vektor1 for at gemme heltal.
  6. Brug en for-lรธkke til at oprette variabel x med vรฆrdier fra 1 til 10.
  7. Skub vรฆrdierne af variabel x ind i vektoren.
  8. Udskriv stรธrrelsen af โ€‹โ€‹vektoren sammen med anden tekst pรฅ konsollen.
  9. Udskriv vektorens kapacitet sammen med anden tekst pรฅ konsollen.
  10. Udskriv det maksimale antal elementer, vektoren kan indeholde sammen med anden tekst pรฅ konsollen.
  11. Tilpas stรธrrelsen pรฅ vektoren til kun at indeholde 5 elementer.
  12. Udskriv den nye stรธrrelse af vektoren sammen med anden tekst.
  13. Kontroller, om vektoren ikke er tom.
  14. Udskriv tekst pรฅ konsollen, hvis vektoren ikke er tom.
  15. Brug en else-sรฆtning til at angive, hvad du skal gรธre, hvis vektoren er tom.
  16. Tekst, der skal udskrives pรฅ konsollen, hvis vektoren er tom.
  17. Programmet skal returnere vรฆrdi efter vellykket afslutning.
  18. Slutningen af โ€‹โ€‹hoved() funktionsteksten.

Ofte Stillede Spรธrgsmรฅl

En vektor er et dynamisk array, der automatisk tilpasser sig selv i stรธrrelse og kender sin egen stรธrrelse, mens et indbygget array har en fast lรฆngde, der er indstillet pรฅ kompileringstidspunktet. Vektorer administrerer hukommelse for dig; rรฅ arrays gรธr ikke.

Brug sรฆnkningsoperatoren, f.eks. nums[0], til hurtig direkte adgang. Medlemsfunktionen at() gรธr, ligesom nums.at(0), det samme, men kaster en "out_of_range"-undtagelse, nรฅr indekset er ugyldigt, hvilket gรธr den mere sikker.

Deklarer en vektor, hvis elementer selv er vektorer, for eksempel vektor > gitter. Du kan justere stรธrrelsen med konstruktรธrer eller push_back-rรฆkker. Hver indre vektor kan vokse uafhรฆngigt, hvilket giver dig en fleksibel matrix, der kan tilpasses i stรธrrelse.

En vektor lagrer elementer i sammenhรฆngende hukommelse med hurtig tilfรฆldig adgang, mens en std::list er en dobbeltlรฆnket liste med hurtig indsรฆttelse eller sletning hvor som helst, men uden direkte indeksering. Vรฆlg baseret pรฅ dit adgangsmรธnster.

Inkluder algoritmens header og kald std::sort med begin- og end-iteratorerne, som i sort(nums.begin(), nums.end()). Sortering er som standard stigende; send en brugerdefineret komparator eller hรธjere. () for at sortere i faldende rรฆkkefรธlge.

Ja. En vektor er en skabelon og kan indeholde enhver type, inklusive streng, brugerdefinerede klasser og endda andre vektorer. Deklarer elementtypen i vinkelparenteserne, f.eks. vektor. eller vektor .

Ja. AI-kodningsassistenter omdanner en kort prompt eller kommentar til fungerende vektorkode, inklusive deklaration, push_back-lรธkker og iteration. Gennemgรฅ altid de foreslรฅede typer, grรฆnser og kapacitetshรฅndtering, da AI kan overse projektspecifikke krav.

Ja. GitHub Copilot foreslรฅr vektordeklarationer, push_back- og insert-kald samt iteratorlรธkker, mens du skriver. Den hรฅndterer gentagne standardtekster godt, selvom du stadig bรธr verificere indekser, stรธrrelsesรฆndringer og logik, fรธr du kompilerer.

Opsummer dette indlรฆg med: