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: