Vektor inn C++ Standard malbibliotek (STL) med eksempel

โšก Smart oppsummering

Vektor inn C++ er en dynamisk matrise fra standardmalbiblioteket som endrer stรธrrelse automatisk nรฅr elementer legges til eller fjernes, og lagrer elementer i sammenhengende minne slik at programmerere kan fรฅ tilgang til og navigere i dem ved hjelp av iteratorer.

  • ๐Ÿ“ฆ Dynamisk matrise: A C++ Vektoren vokser eller krymper automatisk, i motsetning til en statisk matrise med fast stรธrrelse.
  • ๐Ÿงฉ Overskrift og syntaks: Inkluder vektoroverskriften, og deklarer deretter vektoren navn for รฅ lagre typede elementer.
  • ๐Ÿงญ Iteratorer: begin(), end(), cbegin() og cend() beveger seg over vektorelementer som pekere.
  • ๐Ÿ› ๏ธ Modifikatorer: push_back(), insert(), pop_back(), erase() og clear() endrer vektorinnholdet.
  • ๐Ÿ“ Kapasitet: size(), capacity(), max_size(), resize() og empty() rapporterer eller justerer lagringsplass.
  • ๐Ÿค– AI-hjelp: GitHub Copilot og lignende AI-assistenter stillaserer vektoroperasjoner fra en kort kommentar.

C++ Vektor STL

Hva er en C++ Vektor?

A C++ Vector er en dynamisk matrise som kan endre stรธrrelsen pรฅ seg selv automatisk. Endre stรธrrelsen skjer etter at et element er lagt til eller slettet fra vektoren. Lagringen hรฅndteres automatisk av containeren. Elementene i en vektor lagres i sammenhengende lagring. Dette tillater C++ programmerere for รฅ fรฅ tilgang til og krysse vektorelementene ved hjelp av iteratorer.

Innsetting av nye data i en vektor gjรธres pรฅ slutten. Dette tar en differensiell tid. Fjerning av et element fra en vektor tar konstant tid. ร…rsaken er at det ikke er behov for รฅ endre stรธrrelsen pรฅ vektoren. Innsetting eller sletting av et element i begynnelsen av vektoren tar lineรฆr tid.

Fรธr du skriver kode med vektorer, er det nyttig รฅ vite nรฅr de er den rette beholderen รฅ strekke seg etter.

Nรฅr skal man bruke en vektor?

A C++ vektor bรธr brukes under fรธlgende omstendigheter:

  • Nรฅr du arbeider med dataelementer som endres konsekvent.
  • Hvis stรธrrelsen pรฅ dataene ikke er kjent fรธr du begynner, vil ikke vektoren kreve at du angir maksimal stรธrrelse pรฅ beholderen.

Hvordan initialisere vektorer i C++

Syntaksen til vektorer i C++ er:

vector <data-type> name (items)

Som vist ovenfor begynner vi med vektornรธkkelordet.

  • Ocuco datatype er datatypen til elementene som skal lagres i vektoren.
  • Ocuco navn er navnet pรฅ vektoren eller dataelementene.
  • Ocuco varer angir antall elementer for vektordataene. Denne parameteren er valgfri.

Nรฅr en vektor eksisterer, gir iteratorer deg en pekerlignende mรฅte รฅ bevege deg over elementene pรฅ.

Iteratorer

Hensikten med iteratorer er รฅ hjelpe oss med รฅ fรฅ tilgang til elementene som er lagret i en vektor. Det er et objekt som fungerer som en peker. Her er de vanlige iteratorene som stรธttes av C++ vektorer:

  • vektor::begynn(): det gir en iterator som peker pรฅ det fรธrste elementet i vektoren.
  • vektor::slutt(): det gir en iterator som peker pรฅ elementet forbi slutten av vektoren.
  • vektor::cbegin(): Det er det samme som vector::begin(), men det har ikke muligheten til รฅ endre elementer.
  • vektor::cend(): Det er det samme som vector::end(), men kan ikke endre vektorelementer.

Fรธlgende eksempel fyller ut en vektor og gรฅr deretter gjennom den 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;
}

Utgang:

C++ vektoriteratorer Eksempel 1 utdata

Her er et skjermbilde av koden:

C++ vektoriteratorer Eksempel 1 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i koden vรฅr. Det vil tillate oss รฅ lese fra og skrive til konsollen.
  2. Inkluder vektoroverskriftsfilen i koden vรฅr. Det vil tillate oss รฅ jobbe med vektorer i C++.
  3. Inkluder std-navneomrรฅdet for รฅ bruke dets klasser og funksjoner uten รฅ kalle det.
  4. Kalle hoved()-funksjonen som logikken til programmet skal legges til.
  5. { markerer starten pรฅ hoveddelen av hoved()-funksjonen.
  6. Deklarer en vektor kalt nums for รฅ lagre et sett med heltall.
  7. Lag en for-lรธkke som hjelper oss med รฅ iterere over vektoren. Variabelen vil hjelpe oss med รฅ iterere over vektorelementene, fra det fรธrste til det femte elementet.
  8. Skyv elementer inn i vektornummeret fra baksiden. For hver iterasjon vil dette legge til gjeldende verdi av variabel a inn i vektoren, som er 1 til 5.
  9. Skriv ut litt tekst pรฅ konsollen.
  10. Bruk en iteratorvariabel a for รฅ iterere over elementene i vektornumre fra begynnelsen til elementet forbi slutten. Merk at vi bruker vektor::begin() og vector::end() iteratorer.
  11. Skriv ut verdiene pekt pรฅ av iteratorvariabel a pรฅ konsollen for hver iterasjon.
  12. Skriv ut litt tekst pรฅ konsollen. \n er et nytt linjetegn som flytter markรธren til den nye linjen for รฅ skrive ut derfra.
  13. Bruk en iteratorvariabel til รฅ iterere over elementene i vektornumrene fra begynnelsen til forbi-slutt-elementet. Merk at vi bruker iteratorene vector::cbegin() og vector::cend().
  14. Skriv ut verdiene pekt pรฅ av iteratorvariabel a pรฅ konsollen for hver iterasjon.
  15. Hovedfunksjonen skal returnere en verdi hvis programmet kjรธrer vellykket.
  16. Slutten av hoveddelen av hoved()-funksjonen.

Modifikatorer

Modifikatorer brukes for รฅ endre betydningen av den angitte datatypen. Her er de vanlige modifikatorene i C++:

  • vektor::push_back(): Denne modifikatoren skyver elementene fra baksiden.
  • vektor::sett inn(): For รฅ sette inn nye elementer i en vektor pรฅ et spesifisert sted.
  • vektor::pop_back(): Denne modifikatoren fjerner vektorelementene fra baksiden.
  • vektor::slett(): Den brukes til รฅ fjerne en rekke elementer fra den angitte plasseringen.
  • vektor::clear(): Den fjerner alle vektorelementene.

Det neste eksemplet bruker disse modifikatorene i rekkefรธlge for รฅ se hvordan en vektor endres.

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();			
}

Utgang:

C++ Vektormodifikatorer Eksempel 2 utdata

Her er et skjermbilde av koden:

C++ vektormodifikatorer Eksempel 2 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonene.
  2. Inkluder vektoroverskriftsfilen i koden vรฅr for รฅ bruke funksjonene.
  3. Inkluder std-navneomrรฅdet for รฅ bruke klassene uten รฅ kalle det.
  4. Kalle hoved()-funksjonen. Programlogikken bรธr legges til inne i kroppen.
  5. Starten pรฅ hoveddelen av hoved()-funksjonen.
  6. Deklarer en vektor kalt nums for รฅ lagre noen heltallsverdier.
  7. Lagre 5 elementer i vektortallene. Hver med en verdi pรฅ 1.
  8. Skriv ut litt tekst pรฅ konsollen.
  9. Bruk en iteratorvariabel a for รฅ iterere over elementene i vektortall.
  10. Skriv ut verdiene til vektornumre pรฅ konsollen for hver iterasjon.
  11. Legg til verdien 2 til slutten av vektortallene.
  12. Deklarer en heltallsvariabel n for รฅ lagre stรธrrelsen pรฅ vektortallene.
  13. Skriv ut den siste verdien av vektortall sammen med annen tekst. Den skal returnere en 2.
  14. Fjern det siste elementet fra vektortallene. De 2 vil bli fjernet.
  15. Skriv ut tekst pรฅ konsollen. \n flytter markรธren til den nye linjen for รฅ skrive ut teksten der.
  16. Bruk en iteratorvariabel a for รฅ iterere over elementene i vektortall.
  17. Skriv ut verdiene til vektornumre pรฅ konsollen for hver iterasjon.
  18. Sett inn verdien 7 til begynnelsen av vektortallene.
  19. Skriv ut den fรธrste verdien av vektortall sammen med annen tekst. Den skal returnere 7.
  20. Slett alle elementer fra vektornumrene.
  21. Skriv ut stรธrrelsen pรฅ vektornummeret sammen med annen tekst etter รฅ ha fjernet alt innhold. Den skal returnere 0.
  22. Slutten av hoveddelen av hoved()-funksjonen.

Kapasitet

Bruk fรธlgende funksjoner for รฅ bestemme kapasiteten til en vektor:

  • Stรธrrelse() โ€“ Den returnerer antall elementer i en vektor.
  • Maks_stรธrrelse() โ€“ Den returnerer det hรธyeste antallet elementer en vektor kan lagre.
  • Kapasitet() โ€“ Den returnerer mengden lagringsplass som er tildelt en vektor.
  • Endre stรธrrelse() โ€“ Den endrer stรธrrelsen pรฅ beholderen til รฅ inneholde n elementer. Hvis vektorstrรธmstรธrrelsen er stรธrre enn n, vil de bakre elementene bli fjernet fra vektoren. Hvis vektorstrรธmstรธrrelsen er mindre enn n, vil ekstra elementer bli lagt til bakerst i vektoren.
  • Tรธmme() โ€“ returnerer sann hvis en vektor er tom. Ellers returnerer den usann.

Dette siste eksemplet rapporterer og justerer lagringen av en vektor ved hjelp av kapasitetsfunksjonene ovenfor.

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;
}

Utgang:

C++ vektorkapasitet Eksempel 3 utgang

Her er et skjermbilde av koden:

C++ vektorkapasitet Eksempel 3 kode

Code Forklaring:

  1. Inkluder iostream-headerfilen i koden vรฅr for รฅ bruke funksjonen.
  2. Inkluder vektoroverskriftsfilen i koden vรฅr for รฅ bruke funksjonene.
  3. Inkluder std-navneomrรฅdet i koden vรฅr for รฅ bruke klassene uten รฅ kalle det.
  4. Kalle hoved()-funksjonen. Programlogikken skal legges til i hoveddelen av denne funksjonen.
  5. Lag en vektor kalt vektor1 for รฅ lagre heltall.
  6. Bruk en for-lรธkke for รฅ lage variabel x med verdier fra 1 til 10.
  7. Skyv verdiene til variabel x inn i vektoren.
  8. Skriv ut stรธrrelsen pรฅ vektoren sammen med annen tekst pรฅ konsollen.
  9. Skriv ut kapasiteten til vektoren sammen med annen tekst pรฅ konsollen.
  10. Skriv ut det maksimale antallet elementer vektoren kan holde sammen med annen tekst pรฅ konsollen.
  11. Endre stรธrrelsen pรฅ vektoren for รฅ inneholde bare 5 elementer.
  12. Skriv ut den nye stรธrrelsen pรฅ vektoren sammen med annen tekst.
  13. Sjekk om vektoren ikke er tom.
  14. Skriv ut tekst pรฅ konsollen hvis vektoren ikke er tom.
  15. Bruk en else-setning for รฅ angi hva du skal gjรธre hvis vektoren er tom.
  16. Tekst som skal skrives ut pรฅ konsollen hvis vektoren er tom.
  17. Programmet mรฅ returnere verdi ved vellykket gjennomfรธring.
  18. Slutten av hoved()-funksjonens hoveddel.

Spรธrsmรฅl og svar

En vektor er en dynamisk array som skalerer seg selv automatisk og kjenner sin egen stรธrrelse, mens en innebygd array har en fast lengde satt ved kompileringstid. Vektorer administrerer minne for deg; rรฅ arrayer gjรธr det ikke.

Bruk subscript-operatoren, for eksempel nums[0], for rask direkte tilgang. Medlemsfunksjonen at() gjรธr det samme, i likhet med nums.at(0), men kaster et out_of_range-unntak nรฅr indeksen er ugyldig, noe som gjรธr den tryggere.

Deklarer en vektor hvis elementer i seg selv er vektorer, for eksempel vektor > rutenett. Du kan endre stรธrrelsen pรฅ det med konstruktรธrer eller push_back-rader. Hver indre vektor kan vokse uavhengig, noe som gir deg en fleksibel matrise som kan endres i stรธrrelse.

En vektor lagrer elementer i sammenhengende minne med rask tilfeldig tilgang, mens en std::list er en dobbeltlenket liste med rask innsetting eller sletting hvor som helst, men uten direkte indeksering. Velg basert pรฅ tilgangsmรธnsteret ditt.

Inkluder algoritmehodet og kall std::sort med begin- og end-iteratorene, som i sort(nums.begin(), nums.end()). Sortering er stigende som standard; send en tilpasset komparator eller hรธyere. () for รฅ sortere i synkende rekkefรธlge.

Ja. En vektor er en mal og kan inneholde alle typer, inkludert strenger, tilpassede klasser og til og med andre vektorer. Deklarer elementtypen i vinkelparentesene, for eksempel vektor. eller vektor .

Ja. AI-kodingsassistenter gjรธr en kort prompt eller kommentar om til fungerende vektorkode, inkludert deklarasjon, push_back-lรธkker og iterasjon. Se alltid gjennom de foreslรฅtte typene, grensene og kapasitetshรฅndteringen, siden AI kan gรฅ glipp av prosjektspesifikke krav.

Ja. GitHub Copilot foreslรฅr vektordeklarasjoner, push_back- og insert-kall, og iteratorlรธkker mens du skriver. Den hรฅndterer repeterende standardtekst godt, men du bรธr fortsatt verifisere indekser, endring av stรธrrelse og logikk fรธr kompilering.

Oppsummer dette innlegget med: