Vektor in C++ Standard Template Library (STL) med exempel

โšก Smart sammanfattning

Vektor in C++ รคr en dynamisk array frรฅn Standard Template Library som รคndrar storlek automatiskt nรคr element lรคggs till eller tas bort, och lagrar objekt i sammanhรคngande minne sรฅ att programmerare kan komma รฅt och navigera i dem med hjรคlp av iteratorer.

  • ๐Ÿ“ฆ Dynamisk array: A C++ Vektorn vรคxer eller krymper automatiskt, till skillnad frรฅn en statisk array med fast storlek.
  • ๐Ÿงฉ Rubrik och syntax: Inkludera vektorrubriken och deklarera sedan vektorn namn fรถr att lagra typade element.
  • ๐Ÿงญ Iteratorer: begin(), end(), cbegin() och cend() rรถr sig รถver vektorelement som pekare.
  • ๐Ÿ› ๏ธ Modifierare: push_back(), insert(), pop_back(), erase() och clear() รคndrar vektorinnehรฅll.
  • ๐Ÿ“ Kapacitet: size(), capacity(), max_size(), resize() och empty() rapporterar eller justerar lagring.
  • ๐Ÿค– AI-hjรคlp: GitHub Copilot och liknande AI-assistenter stรถder vektoroperationer frรฅn en kort kommentar.

C++ Vektor STL

Vad รคr en C++ Vektor?

A C++ Vector รคr en dynamisk array som kan รคndra storlek pรฅ sig sjรคlv automatiskt. Storleksรคndringen sker efter att ett element har lagts till eller tagits bort frรฅn vektorn. Lagringen hanteras automatiskt av containern. Elementen i en vektor lagras i angrรคnsande lagring. Detta tillรฅter C++ programmerare fรถr att komma รฅt och korsa vektorelementen med iteratorer.

Infogning av ny data i en vektor gรถrs i dess slut. Detta tar en differentiell tid. Borttagning av ett element frรฅn en vektor tar konstant tid. Anledningen รคr att det inte finns nรฅgot behov av att รคndra storlek pรฅ vektorn. Infogning eller borttagning av ett element i bรถrjan av vektorn tar linjรคr tid.

Innan man skriver kod med vektorer รคr det bra att veta nรคr de รคr rรคtt behรฅllare att gripa efter.

Nรคr ska man anvรคnda en vektor?

A C++ vektor ska anvรคndas under fรถljande omstรคndigheter:

  • Nรคr man hanterar dataelement som fรถrรคndras konsekvent.
  • Om datastorleken inte รคr kรคnd innan du bรถrjar, krรคver vektorn inte att du anger containerns maximala storlek.

Hur man initierar vektorer i C++

Syntaxen fรถr vektorer i C++ รคr:

vector <data-type> name (items)

Som visas ovan bรถrjar vi med nyckelordet vektor.

  • Ocuco-landskapet datatyp รคr datatypen fรถr de element som ska lagras i vektorn.
  • Ocuco-landskapet namn รคr namnet pรฅ vektorn eller dataelementen.
  • Ocuco-landskapet artikel anger antalet element fรถr vektordata. Denna parameter รคr valfri.

Nรคr en vektor existerar ger iteratorer dig ett pekarliknande sรคtt att fรถrflytta dig mellan dess element.

iteratorer

Syftet med iteratorer รคr att hjรคlpa oss att komma รฅt elementen som lagras i en vektor. Det รคr ett objekt som fungerar som en pekare. Hรคr รคr de vanliga iteratorer som stรถds av C++ vektorer:

  • vektor::bรถrja(): det ger en iterator som pekar pรฅ det fรถrsta elementet i vektorn.
  • vektor::slut(): det ger en iterator som pekar pรฅ elementet fรถrbi slutet av vektorn.
  • vektor::cbegin(): Det รคr samma sak som vector::begin(), men det har inte mรถjlighet att modifiera element.
  • vektor::cend(): Det รคr samma sak som vector::end() men kan inte modifiera vektorelement.

Fรถljande exempel fyller en vektor och gรฅr sedan igenom den med bรฅde muterbara och konstanta iteratorer.

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

Produktion:

C++ vektoriteratorer Exempel 1 utdata

Hรคr รคr en skรคrmdump av koden:

C++ vektoriteratorer Exempel 1 kod

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅr kod. Det gรถr att vi kan lรคsa frรฅn och skriva till konsolen.
  2. Inkludera vektorhuvudfilen i vรฅr kod. Det kommer att tillรฅta oss att arbeta med vektorer i C++.
  3. Inkludera std-namnomrรฅdet fรถr att anvรคnda dess klasser och funktioner utan att anropa det.
  4. Anropa funktionen main() dรคr programmets logik ska lรคggas till.
  5. { markerar bรถrjan pรฅ huvuddelen av funktionen main().
  6. Deklarera en vektor som heter nums fรถr att lagra en uppsรคttning heltal.
  7. Skapa en for-loop som hjรคlper oss att iterera รถver vektorn. Variabeln hjรคlper oss att iterera รถver vektorelementen, frรฅn det fรถrsta till det femte elementet.
  8. Tryck in element i vektornumret bakifrรฅn. Fรถr varje iteration kommer detta att lรคgga till det aktuella vรคrdet fรถr variabel a i vektorn, vilket รคr 1 till 5.
  9. Skriv ut lite text pรฅ konsolen.
  10. Anvรคnd en iteratorvariabel a fรถr att iterera รถver elementen i vektornummer frรฅn bรถrjan till elementet fรถrbi slutet. Observera att vi anvรคnder vektor::begin() och vector::end() iteratorer.
  11. Skriv ut vรคrdena som pekas pรฅ av iteratorvariabel a pรฅ konsolen fรถr varje iteration.
  12. Skriv ut lite text pรฅ konsolen. \n รคr ett nytt linjetecken som flyttar markรถren till den nya raden fรถr att skriva ut dรคrifrรฅn.
  13. Anvรคnd en iteratorvariabel fรถr att iterera รถver elementen i vektornumren frรฅn bรถrjan till det fรถrbi-slut-elementet. Observera att vi anvรคnder iteratorerna vector::cbegin() och vector::cend().
  14. Skriv ut vรคrdena som pekas pรฅ av iteratorvariabel a pรฅ konsolen fรถr varje iteration.
  15. Huvudfunktionen bรถr returnera ett vรคrde om programmet kรถrs framgรฅngsrikt.
  16. Slutet pรฅ huvuddelen av funktionen main().

modifierare

Modifierare anvรคnds fรถr att รคndra innebรถrden av den angivna datatypen. Hรคr รคr de vanliga modifierarna i C++:

  • vector::push_back(): Denna modifierare skjuter elementen frรฅn baksidan.
  • vektor::insert(): Fรถr att infoga nya objekt i en vektor pรฅ en angiven plats.
  • vector::pop_back(): Denna modifierare tar bort vektorelementen frรฅn baksidan.
  • vektor::erase(): Den anvรคnds fรถr att ta bort en rad element frรฅn den angivna platsen.
  • vektor::clear(): Det tar bort alla vektorelement.

Nรคsta exempel tillรคmpar dessa modifierare i sekvens fรถr att se hur en vektor fรถrรคndras.

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

Produktion:

C++ vektormodifierare Exempel 2 utdata

Hรคr รคr en skรคrmdump av koden:

C++ vektormodifierare Exempel 2 kod

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
  2. Inkludera vektorhuvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
  3. Inkludera std-namnomrรฅdet fรถr att anvรคnda dess klasser utan att anropa det.
  4. Anropa main()-funktionen. Programlogiken bรถr lรคggas till i dess kropp.
  5. Bรถrjan av huvuddelen av funktionen main().
  6. Deklarera en vektor som heter nums fรถr att lagra nรฅgra heltalsvรคrden.
  7. Lagra 5 element i vektornumren. Var och en med vรคrdet 1.
  8. Skriv ut lite text pรฅ konsolen.
  9. Anvรคnd en iteratorvariabel a fรถr att iterera รถver elementen i vektornummer.
  10. Skriv ut vรคrdena fรถr vektornumren pรฅ konsolen fรถr varje iteration.
  11. Lรคgg till vรคrdet 2 till slutet av vektornumren.
  12. Deklarera en heltalsvariabel n fรถr att lagra storleken pรฅ vektornumren.
  13. Skriv ut det sista vรคrdet av vektornumren tillsammans med annan text. Den borde ge en 2:a.
  14. Ta bort det sista elementet frรฅn vektornumren. De 2 kommer att tas bort.
  15. Skriv ut text pรฅ konsolen. \n flyttar markรถren till den nya raden fรถr att skriva ut texten dรคr.
  16. Anvรคnd en iteratorvariabel a fรถr att iterera รถver elementen i vektornummer.
  17. Skriv ut vรคrdena fรถr vektornumren pรฅ konsolen fรถr varje iteration.
  18. Infoga vรคrdet 7 i bรถrjan av vektornumren.
  19. Skriv ut det fรถrsta vรคrdet av vektornummer tillsammans med annan text. Den borde รฅterkomma 7.
  20. Ta bort alla element frรฅn vektornumren.
  21. Skriv ut storleken pรฅ vektornumret tillsammans med annan text efter att ha rensat allt innehรฅll. Det bรถr returnera 0.
  22. Slutet pรฅ huvuddelen av funktionen main().

Kapacitet

Anvรคnd fรถljande funktioner fรถr att bestรคmma en vektors kapacitet:

  • Storlek() โ€“ Den returnerar antalet objekt i en vektor.
  • Max_size() โ€“ Den returnerar det hรถgsta antalet objekt som en vektor kan lagra.
  • Kapacitet() โ€“ Den returnerar mรคngden lagringsutrymme som allokerats till en vektor.
  • ร„ndra storlek() โ€“ Den รคndrar storleken pรฅ behรฅllaren sรฅ att den innehรฅller n objekt. Om vektorns nuvarande storlek รคr stรถrre รคn n, kommer de bakre objekten att tas bort frรฅn vektorn. Om vektorns nuvarande storlek รคr mindre รคn n, kommer extra objekt att lรคggas till lรคngst bak i vektorn.
  • Tรถmma() โ€“ returnerar sant om en vektor รคr tom. Annars returnerar den falskt.

Detta sista exempel rapporterar och justerar lagringen av en vektor med hjรคlp av kapacitetsfunktionerna ovan.

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

Produktion:

C++ vektorkapacitet Exempel 3 utgรฅng

Hรคr รคr en skรคrmdump av koden:

C++ vektorkapacitet Exempel 3 kod

Code Fรถrklaring:

  1. Inkludera iostream-huvudfilen i vรฅr kod fรถr att anvรคnda dess funktion.
  2. Inkludera vektorhuvudfilen i vรฅr kod fรถr att anvรคnda dess funktioner.
  3. Inkludera std-namnomrรฅdet i vรฅr kod fรถr att anvรคnda dess klasser utan att anropa det.
  4. Anropa main()-funktionen. Programlogiken bรถr lรคggas till i kroppen av denna funktion.
  5. Skapa en vektor med namnet vektor1 fรถr att lagra heltal.
  6. Anvรคnd en for-loop fรถr att skapa variabel x med vรคrden frรฅn 1 till 10.
  7. Tryck in vรคrdena fรถr variabel x i vektorn.
  8. Skriv ut storleken pรฅ vektorn tillsammans med annan text pรฅ konsolen.
  9. Skriv ut vektorns kapacitet tillsammans med annan text pรฅ konsolen.
  10. Skriv ut det maximala antalet objekt som vektorn kan hรฅlla tillsammans med annan text pรฅ konsolen.
  11. ร„ndra storlek pรฅ vektorn sรฅ att den bara innehรฅller 5 element.
  12. Skriv ut den nya storleken pรฅ vektorn tillsammans med annan text.
  13. Kontrollera om vektorn inte รคr tom.
  14. Skriv ut text pรฅ konsolen om vektorn inte รคr tom.
  15. Anvรคnd en else-sats fรถr att ange vad du ska gรถra om vektorn รคr tom.
  16. Text att skriva ut pรฅ konsolen om vektorn รคr tom.
  17. Programmet mรฅste returnera vรคrde efter framgรฅngsrikt slutfรถrande.
  18. Slutet pรฅ huvuddelen () funktion.

Vanliga frรฅgor

En vektor รคr en dynamisk array som รคndrar storlek automatiskt och kรคnner till sin egen storlek, medan en inbyggd array har en fast lรคngd som sรคtts vid kompileringstillfรคllet. Vektorer hanterar minne รฅt dig; rรฅa arrayer gรถr det inte.

Anvรคnd subscript-operatorn, till exempel nums[0], fรถr snabb direktรฅtkomst. Medlemsfunktionen at(), precis som nums.at(0), gรถr samma sak men utlรถser ett out_of_range-undantag nรคr indexet รคr ogiltigt, vilket gรถr den sรคkrare.

Deklarera en vektor vars element sjรคlva รคr vektorer, till exempel vektor > rutnรคt. Du kan รคndra storlek pรฅ det med konstruktorer eller push_back-rader. Varje inre vektor kan vรคxa oberoende, vilket ger dig en flexibel, storleksรคndbar matris.

En vektor lagrar element i sammanhรคngande minne med snabb slumpmรคssig รฅtkomst, medan en std::list รคr en dubbellรคnkad lista med snabb insรคttning eller borttagning var som helst men utan direkt indexering. Vรคlj baserat pรฅ ditt รฅtkomstmรถnster.

Inkludera algoritmens rubrik och anropa std::sort med begin- och end-iteratorerna, som i sort(nums.begin(), nums.end()). Sorteringen รคr stigande som standard; skicka en anpassad jรคmfรถrelsekod eller hรถgre. () fรถr att sortera i fallande ordning.

Ja. En vektor รคr en mall och kan innehรฅlla alla typer, inklusive strรคngar, anpassade klasser och รคven andra vektorer. Deklarera elementtypen inom vinkelparenteserna, till exempel vektor. eller vektor .

Ja. AI-kodningsassistenter omvandlar en kort prompt eller kommentar till fungerande vektorkod, inklusive deklaration, push_back-loopar och iteration. Granska alltid de fรถreslagna typerna, grรคnserna och kapacitetshanteringen, eftersom AI kan missa projektspecifika krav.

Ja. GitHub Copilot fรถreslรฅr vektordeklarationer, push_back- och insert-anrop, och iteratorloopar medan du skriver. Den hanterar repetitiva standardinstรคllningar bra, men du bรถr fortfarande verifiera index, storleksรคndring och logik innan du kompilerar.

Sammanfatta detta inlรคgg med: