Vector-in C++ Standaardsjabloonbibliotheek (STL) met voorbeeld

โšก Slimme samenvatting

Vector-in C++ is een dynamische array uit de Standard Template Library die zichzelf automatisch aanpast aan de grootte wanneer elementen worden toegevoegd of verwijderd, waarbij items in aaneengesloten geheugen worden opgeslagen zodat programmeurs ze kunnen benaderen en doorlopen met behulp van iterators.

  • ???? Dynamische array: A C++ Een vector groeit of krimpt automatisch, in tegenstelling tot een statische array met een vaste grootte.
  • ๐Ÿงฉ Koptekst en syntaxis: Voeg de vectorheader toe en declareer vervolgens de vector. naam om getypte elementen op te slaan.
  • ๐Ÿงญ Iteratoren: begin(), end(), cbegin() en cend() bewegen zich door vectorelementen zoals pointers.
  • ๏ธ Aanpassers: De functies push_back(), insert(), pop_back(), erase() en clear() wijzigen de inhoud van een vector.
  • ๐Ÿ“ Capaciteit: De functies size(), capacity(), max_size(), resize() en empty() rapporteren of passen de opslagruimte aan.
  • ๐Ÿค– AI-assistentie: GitHub Copilot en vergelijkbare AI-assistenten genereren vectorbewerkingen op basis van een korte opmerking.

C++ Vector STL

Wat is een C++ Vector?

A C++ Vector is een dynamische array die zichzelf automatisch kan aanpassen. Het aanpassen van de grootte vindt plaats nadat een element is toegevoegd aan of verwijderd uit de vector. De opslag wordt automatisch afgehandeld door de container. De elementen van een vector worden opgeslagen in aaneengesloten opslag. Dit maakt het mogelijk C++ programmeurs om toegang te krijgen tot de vectorelementen en deze te doorlopen met behulp van iteratoren.

Het invoegen van nieuwe gegevens in een vector gebeurt aan het einde ervan. Dit kost differentiรซle tijd. Het verwijderen van een element uit een vector kost constante tijd. De reden hiervoor is dat de vector niet hoeft te worden aangepast. Het invoegen of verwijderen van een element aan het begin van de vector kost lineaire tijd.

Voordat je code schrijft met vectoren, is het handig om te weten wanneer ze de juiste container zijn om te gebruiken.

Wanneer gebruik je een vector?

A C++ vector moet worden gebruikt onder de volgende omstandigheden:

  • Bij het omgaan met data-elementen die consistent veranderen.
  • Als de grootte van de gegevens niet van tevoren bekend is, hoeft u bij de vector de maximale grootte van de container niet in te stellen.

Hoe vectoren te initialiseren in C++

De syntaxis van vectoren in C++ is:

vector <data-type> name (items)

Zoals hierboven weergegeven, beginnen we met het vectortrefwoord.

  • De data type is het gegevenstype van de elementen die in de vector moeten worden opgeslagen.
  • De naam is de naam van de vector of de gegevenselementen.
  • De artikelen Geeft het aantal elementen voor de vectorgegevens aan. Deze parameter is optioneel.

Zodra een vector bestaat, bieden iterators een aanwijzerachtige manier om door de elementen ervan te navigeren.

Iteratoren

Het doel van iterators is om ons te helpen toegang te krijgen tot de elementen die in een vector zijn opgeslagen. Het is een object dat werkt als een pointer. Hieronder staan โ€‹โ€‹de meest voorkomende iterators die worden ondersteund door C++ vectoren:

  • vector::begin(): het geeft een iterator die naar het eerste element van de vector verwijst.
  • vector::end(): het geeft een iterator die verwijst naar het voorbij-het-eind-element van de vector.
  • vector::cbegin(): Het is hetzelfde als `vector::begin()`, maar het heeft niet de mogelijkheid om elementen te wijzigen.
  • vector::cend(): Het is hetzelfde als `vector::end()`, maar je kunt de elementen van een vector niet wijzigen.

Het volgende voorbeeld vult een vector en doorloopt deze vervolgens met zowel veranderlijke als constante iterators.

Voorbeeld 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++ vector iterators Voorbeeld 1 uitvoer

Hier is een screenshot van de code:

C++ Vectoriterators Voorbeeld 1 code

Code Uitleg:

  1. Neem het iostream-headerbestand op in onze code. Hiermee kunnen we lezen van en schrijven naar de console.
  2. Neem het vectorheaderbestand op in onze code. Het zal ons in staat stellen om met vectoren te werken C++.
  3. Neem de std-naamruimte op om de klassen en functies ervan te gebruiken zonder deze aan te roepen.
  4. Roep de functie main() aan waarbinnen de logica van het programma moet worden toegevoegd.
  5. De { markeert het begin van de hoofdtekst van de functie main().
  6. Declareer een vector met de naam nums om een โ€‹โ€‹reeks gehele getallen op te slaan.
  7. Maak een for-lus om door de vector te itereren. De variabele helpt ons om door de elementen van de vector te itereren, van het eerste tot en met het vijfde element.
  8. Duw elementen vanaf de achterkant in de vectornum. Voor elke iteratie wordt hierdoor de huidige waarde van variabele a toegevoegd aan de vector, namelijk 1 tot 5.
  9. Druk wat tekst af op de console.
  10. Gebruik een iteratorvariabele a om de elementen van vector nums te herhalen, van het begin tot het voorbij-het-eind-element. Merk op dat we vector::begin() en vector::end() iterators gebruiken.
  11. Druk voor elke iteratie de waarden af โ€‹โ€‹waarnaar iteratorvariabele a op de console verwijst.
  12. Druk wat tekst af op de console. De \n is een teken voor een nieuwe regel, waarbij de cursor naar de nieuwe regel wordt verplaatst om vanaf daar af te drukken.
  13. Gebruik een iteratorvariabele om te itereren over de elementen van de vector nums, van het begin tot het element voorbij het einde. Merk op dat we de iterators vector::cbegin() en vector::cend() gebruiken.
  14. Druk voor elke iteratie de waarden af โ€‹โ€‹waarnaar iteratorvariabele a op de console verwijst.
  15. De hoofdfunctie moet een waarde retourneren als het programma succesvol wordt uitgevoerd.
  16. Einde van de hoofdtekst van de functie main().

modifiers

Modifiers worden gebruikt om de betekenis van het opgegeven gegevenstype te wijzigen. Hier zijn de gebruikelijke modifiers in C++:

  • vector::push_back(): Deze modifier duwt de elementen vanaf de achterkant.
  • vector::insert(): Voor het invoegen van nieuwe items in een vector op een opgegeven locatie.
  • vector::pop_back(): Deze modifier verwijdert de vectorelementen van de achterkant.
  • vector::wissen(): Het wordt gebruikt voor het verwijderen van een reeks elementen van de opgegeven locatie.
  • vector::clear(): Het verwijdert alle vectorelementen.

Het volgende voorbeeld past deze modifiers achter elkaar toe om te zien hoe een vector verandert.

Voorbeeld 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++ Vectormodificatoren Voorbeeld 2 uitvoer

Hier is een screenshot van de code:

C++ Vectormodifiers Voorbeeld 2 code

Code Uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functies ervan te gebruiken.
  2. Neem het vectorheaderbestand op in onze code om de functies ervan te gebruiken.
  3. Neem de std-naamruimte op om de klassen ervan te gebruiken zonder deze aan te roepen.
  4. Roep de functie main() aan. De programmalogica moet in de hoofdtekst worden toegevoegd.
  5. Het begin van de hoofdtekst van de functie main().
  6. Declareer een vector met de naam nums om enkele gehele waarden op te slaan.
  7. Bewaar 5 elementen in de vectornums. Elk met een waarde van 1.
  8. Druk wat tekst af op de console.
  9. Gebruik een iteratorvariabele a om de elementen van vectornums te herhalen.
  10. Druk voor elke iteratie de waarden van vectorgetallen op de console af.
  11. Voeg de waarde 2 toe aan het einde van de vectornums.
  12. Declareer een geheel getalvariabele n om de grootte van de vectornums op te slaan.
  13. Druk de laatste waarde van vectorgetallen af โ€‹โ€‹naast andere tekst. Het zou een 2 moeten opleveren.
  14. Verwijder het laatste element uit de vectornums. De 2 worden verwijderd.
  15. Tekst afdrukken op de console. De \n verplaatst de cursor naar de nieuwe regel om de tekst daar af te drukken.
  16. Gebruik een iteratorvariabele a om de elementen van vectornums te herhalen.
  17. Druk voor elke iteratie de waarden van vectorgetallen op de console af.
  18. Voeg de waarde 7 in aan het begin van de vectornums.
  19. Druk de eerste waarde van vectornums af naast andere tekst. Het zou 7 moeten retourneren.
  20. Verwijder alle elementen uit de vectornums.
  21. Druk de grootte van het vectorgetal af naast andere tekst nadat u alle inhoud hebt gewist. Het zou 0 moeten retourneren.
  22. Einde van de hoofdtekst van de functie main().

Hefvermogen

Gebruik het volgende functies om de capaciteit van een vector te bepalen:

  • Maat() โ€“ Het retourneert het aantal items in een vector.
  • Max_grootte() โ€“ Het retourneert het maximale aantal items dat een vector kan opslaan.
  • Capaciteit() โ€“ Deze functie geeft de hoeveelheid opslagruimte weer die aan een vector is toegewezen.
  • Formaat wijzigen() โ€“ Het past de grootte van de container aan zodat deze n items kan bevatten. Als de huidige grootte van de vector groter is dan n, worden de items aan het einde van de vector verwijderd. Als de huidige grootte van de vector kleiner is dan n, worden extra items aan het einde van de vector toegevoegd.
  • Leeg() โ€“ Het retourneert true als een vector leeg is. Anders retourneert het false.

Dit laatste voorbeeld rapporteert en past de opslag van een vector aan met behulp van de bovenstaande capaciteitsfuncties.

Voorbeeld 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++ vectorcapaciteit Voorbeeld 3 uitvoer

Hier is een screenshot van de code:

C++ vectorcapaciteit Voorbeeld 3 code

Code Uitleg:

  1. Neem het iostream-headerbestand op in onze code om de functie ervan te gebruiken.
  2. Neem het vectorheaderbestand op in onze code om de functies ervan te gebruiken.
  3. Neem de std-naamruimte op in onze code om de klassen ervan te gebruiken zonder deze aan te roepen.
  4. Roep de functie main() aan. De programmalogica moet worden toegevoegd aan de hoofdtekst van deze functie.
  5. Maak een vector met de naam vector1 om gehele getallen op te slaan.
  6. Gebruik een for-lus om variabele x te maken met waarden van 1 tot 10.
  7. Duw de waarden van variabele x in de vector.
  8. Druk de grootte van de vector af samen met andere tekst op de console.
  9. Druk de capaciteit van de vector af samen met andere tekst op de console.
  10. Druk het maximale aantal items af dat de vector naast andere tekst op de console kan bevatten.
  11. Verklein de vector zodat deze slechts 5 elementen bevat.
  12. Druk het nieuwe formaat van de vector af naast andere tekst.
  13. Controleer of de vector niet leeg is.
  14. Druk tekst af op de console als de vector niet leeg is.
  15. Gebruik een else-instructie om aan te geven wat er moet gebeuren als de vector leeg is.
  16. Tekst die op de console moet worden afgedrukt als de vector leeg is.
  17. Het programma moet waarde retourneren na succesvolle voltooiing.
  18. Einde van de hoofdtekst van de functie main().

Veelgestelde vragen

Een vector is een dynamische array die zichzelf automatisch aanpast en zijn eigen grootte kent, terwijl een ingebouwde array een vaste lengte heeft die tijdens het compileren wordt bepaald. Vectoren beheren het geheugen voor je; gewone arrays doen dat niet.

Gebruik de subscript-operator, zoals nums[0], voor snelle directe toegang. De lidfunctie at(), zoals nums.at(0), doet hetzelfde, maar genereert een out_of_range-uitzondering wanneer de index ongeldig is, waardoor deze veiliger is.

Declareer een vector waarvan de elementen zelf ook vectoren zijn, bijvoorbeeld vector > raster. Je kunt de grootte ervan aanpassen met constructors of door rijen terug te plaatsen. Elke interne vector kan onafhankelijk groeien, waardoor je een flexibele, schaalbare matrix krijgt.

Een vector slaat elementen op in aaneengesloten geheugen met snelle willekeurige toegang, terwijl een std::list een dubbelgelinkte lijst is met snelle invoeging of verwijdering overal, maar zonder directe indexering. Kies op basis van uw toegangspatroon.

Voeg de algoritmeheader toe en roep std::sort aan met de begin- en einditerators, zoals in sort(nums.begin(), nums.end()). Sorteren gebeurt standaard oplopend; geef een aangepaste comparator of een grotere waarde door. () om in aflopende volgorde te sorteren.

Ja. Een vector is een sjabloon en kan elk type bevatten, inclusief strings, aangepaste klassen en zelfs andere vectoren. Declareer het elementtype tussen de punthaken, bijvoorbeeld vector. of vector .

Ja. AI-codeerassistenten zetten een korte aanwijzing of opmerking om in werkende vectorcode, inclusief declaraties, push_back-loops en iteraties. Controleer altijd de voorgestelde typen, grenzen en capaciteitsafhandeling, aangezien AI projectspecifieke vereisten kan missen.

Ja. GitHub-copiloot Het programma suggereert vectordeclaraties, push_back- en insert-aanroepen en iteratielussen terwijl je typt. Het gaat goed om met repetitieve boilerplate-code, hoewel je indexen, resizing en logica nog steeds moet controleren voordat je compileert.

Vat dit bericht samen met: