Vektor u C++ Biblioteka standardnih predložaka (STL) s primjerom

⚡ Pametni sažetak

Vektor u C++ je dinamički niz iz Standardne biblioteke predložaka koji automatski mijenja veličinu kako se elementi dodaju ili uklanjaju, pohranjujući stavke u susjednu memoriju tako da im programeri mogu pristupiti i kretati se kroz njih pomoću iteratora.

  • ???? Dinamički niz: A C++ Vektor se automatski povećava ili smanjuje, za razliku od statičkog niza fiksne veličine.
  • 🧩 Zaglavlje i sintaksa: Uključite zaglavlje vektora, a zatim deklarirajte vektor ime za pohranu tipiziranih elemenata.
  • 🧭 Iteratori: begin(), end(), cbegin() i cend() se kreću preko vektorskih elemenata poput pokazivača.
  • 🛠️ Modifikatori: push_back(), insert(), pop_back(), erase() i clear() mijenjaju sadržaj vektora.
  • 📐 Kapacitet: size(), capacity(), max_size(), resize() i empty() izvještavaju ili prilagođavaju memoriju.
  • 🤖 AI pomoć: GitHub Copilot i slični AI asistenti izrađuju vektorske operacije iz kratkog komentara.

C++ Vektorski STL

Što je a C++ Vektor?

A C++ Vektor je dinamički niz koji može sam sebi mijenjati veličinu automatski. Promjena veličine se događa nakon što je element dodan ili izbrisan iz vektora. Spremnik automatski upravlja skladištenjem. Elementi vektora pohranjuju se u kontinuiranu pohranu. Ovo dopušta C++ programeri za pristup i prelazak vektorskih elemenata pomoću iteratora.

Umetanje novih podataka u vektor vrši se na njegovom kraju. To traje diferencijalno vrijeme. Uklanjanje elementa iz vektora traje konstantno vrijeme. Razlog je taj što nema potrebe za promjenom veličine vektora. Umetanje ili brisanje elementa na početku vektora traje linearno vrijeme.

Prije pisanja koda s vektorima, korisno je znati kada su oni pravi spremnik za korištenje.

Kada koristiti vektor?

A C++ vektor treba koristiti u sljedećim okolnostima:

  • Kada se radi o elementima podataka koji se dosljedno mijenjaju.
  • Ako veličina podataka nije poznata prije početka, vektor neće zahtijevati postavljanje maksimalne veličine spremnika.

Kako inicijalizirati vektore u C++

Sintaksa vektora u C++ je:

vector <data-type> name (items)

Kao što je gore prikazano, počinjemo s ključnom riječi vektor.

  • The tip podataka je tip podataka elemenata koji će se pohraniti u vektor.
  • The ime je naziv vektora ili podatkovnih elemenata.
  • The predmeti označava broj elemenata za vektorske podatke. Ovaj parametar je opcionalan.

Nakon što vektor postoji, iteratori vam daju način kretanja po njegovim elementima, sličan pokazivaču.

Iteratori

Svrha iteratora je pomoći nam u pristupu elementima koji su pohranjeni u vektoru. To je objekt koji funkcionira poput pokazivača. Evo uobičajenih iteratora koje podržava C++ vektori:

  • vektor::početak(): daje iterator koji pokazuje na prvi element vektora.
  • vektor::kraj(): daje iterator koji pokazuje na zadnji element vektora.
  • vektor::cbegin(): Isto je kao i vector::begin(), ali nema mogućnost mijenjanja elemenata.
  • vektor::cend(): Isto je kao i vector::end(), ali ne može mijenjati vektorske elemente.

Sljedeći primjer popunjava vektor, a zatim prolazi kroz njega s promjenjivim i konstantnim iteratorima.

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

Izlaz:

C++ vektorski iteratori Primjer 1 izlaz

Evo snimke zaslona koda:

C++ Primjer 1 koda vektorskih iteratora

Code Objašnjenje:

  1. Uključite iostream datoteku zaglavlja u naš kod. Omogućit će nam čitanje s konzole i pisanje na nju.
  2. Uključite vektorsku datoteku zaglavlja u naš kod. Omogućit će nam rad s vektorima C++.
  3. Uključite prostor imena std kako biste koristili njegove klase i funkcije bez pozivanja.
  4. Pozovite funkciju main() unutar koje treba dodati logiku programa.
  5. { označava početak tijela funkcije main().
  6. Deklarirajte vektor pod nazivom nums za pohranu skupa cijelih brojeva.
  7. Napravite petlju for koja će nam pomoći u iteraciji kroz vektor. Varijabla će nam pomoći u iteraciji kroz elemente vektora, od 1. do 5. elementa.
  8. Gurnite elemente u vektor num sa stražnje strane. Za svaku iteraciju, ovo će dodati trenutnu vrijednost varijable a u vektor, koji je od 1 do 5.
  9. Ispišite tekst na konzoli.
  10. Upotrijebite varijablu iteratora a za iteraciju preko elemenata brojeva vektora od početka do zadnjeg elementa. Imajte na umu da koristimo iteratore vector::begin() i vector::end().
  11. Ispišite vrijednosti na koje ukazuje varijabla iteratora a na konzoli za svaku iteraciju.
  12. Ispišite tekst na konzoli. \n je znak novog retka, pomiče kursor u novi red da bi se odatle ispisao.
  13. Koristite varijablu iteratora za iteraciju kroz elemente vektora brojeva od početka do elementa nakon kraja. Imajte na umu da koristimo iteratore vector::cbegin() i vector::cend().
  14. Ispišite vrijednosti na koje ukazuje varijabla iteratora a na konzoli za svaku iteraciju.
  15. Funkcija main trebala bi vratiti vrijednost ako se program uspješno izvodi.
  16. Kraj tijela funkcije main().

Izmjenjivači

Modifikatori se koriste za promjenu značenja navedenog tipa podataka. Evo uobičajenih modifikatora u C++:

  • vektor::push_back(): Ovaj modifikator gura elemente sa stražnje strane.
  • vektor::umetni(): Za umetanje novih stavki u vektor na određenom mjestu.
  • vektor::pop_back(): Ovaj modifikator uklanja vektorske elemente sa stražnje strane.
  • vektor::brisanje(): Koristi se za uklanjanje niza elemenata sa specificirane lokacije.
  • vektor::očisti(): Uklanja sve vektorske elemente.

Sljedeći primjer primjenjuje ove modifikatore redom kako bi se vidjelo kako se vektor mijenja.

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

Izlaz:

C++ Primjer 2 izlaza modifikatora vektora

Evo snimke zaslona koda:

C++ Primjer 2 koda modifikatora vektora

Code Objašnjenje:

  1. Uključite iostream datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  2. Uključite vektorsku datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  3. Uključite prostor imena std da biste koristili njegove klase bez pozivanja.
  4. Pozovite funkciju main(). Programsku logiku treba dodati unutar njegovog tijela.
  5. Početak tijela funkcije main().
  6. Deklarirajte vektor pod nazivom nums za pohranu nekih cjelobrojnih vrijednosti.
  7. Pohranite 5 elemenata u brojeve vektora. Svaki ima vrijednost 1.
  8. Ispišite tekst na konzoli.
  9. Upotrijebite varijablu iteratora a za iteraciju preko elemenata brojeva vektora.
  10. Ispišite vrijednosti vektorskih brojeva na konzoli za svaku iteraciju.
  11. Dodajte vrijednost 2 na kraj brojeva vektora.
  12. Deklarirajte cjelobrojnu varijablu n za pohranjivanje veličine vektorskih brojeva.
  13. Ispišite posljednju vrijednost vektorskih brojeva uz ostali tekst. Trebao bi vratiti 2.
  14. Uklonite posljednji element iz brojeva vektora. 2 će biti uklonjena.
  15. Ispis teksta na konzoli. \n pomiče kursor u novi red kako bi se tamo ispisao tekst.
  16. Upotrijebite varijablu iteratora a za iteraciju preko elemenata brojeva vektora.
  17. Ispišite vrijednosti vektorskih brojeva na konzoli za svaku iteraciju.
  18. Umetnite vrijednost 7 na početak brojeva vektora.
  19. Ispišite prvu vrijednost brojeva vektora uz ostali tekst. Trebalo bi vratiti 7.
  20. Izbrišite sve elemente iz brojeva vektora.
  21. Ispišite veličinu vektorskog broja uz drugi tekst nakon brisanja svih sadržaja. Trebao bi vratiti 0.
  22. Kraj tijela funkcije main().

Kapacitet

Koristite sljedeće Funkcije za određivanje kapaciteta vektora:

  • Veličina() – Vraća broj elemenata u vektoru.
  • Max_size() – Vraća najveći broj elemenata koje vektor može pohraniti.
  • Kapacitet() – Vraća količinu memorijskog prostora dodijeljenog vektoru.
  • Promijeni veličinu() – Mijenja veličinu spremnika kako bi sadržavao n stavki. Ako je trenutna veličina vektora veća od n, stražnje stavke bit će uklonjene iz vektora. Ako je trenutna veličina vektora manja od n, dodatne stavke bit će dodane na kraj vektora.
  • Prazan() – vraća vrijednost true ako je vektor prazan. Inače vraća vrijednost false.

Ovaj posljednji primjer prikazuje i prilagođava pohranu vektora koristeći gore navedene funkcije kapaciteta.

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

Izlaz:

C++ Izlaz vektorskog kapaciteta Primjer 3

Evo snimke zaslona koda:

C++ Primjer 3 koda vektorskog kapaciteta

Code Objašnjenje:

  1. Uključite datoteku zaglavlja iostream u naš kod da biste koristili njegovu funkciju.
  2. Uključite vektorsku datoteku zaglavlja u naš kod da biste koristili njezine funkcije.
  3. Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
  4. Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
  5. Napravite vektor pod nazivom vector1 za pohranjivanje cijelih brojeva.
  6. Upotrijebite for petlju za stvaranje varijable x s vrijednostima od 1 do 10.
  7. Gurnite vrijednosti varijable x u vektor.
  8. Ispišite veličinu vektora uz ostali tekst na konzoli.
  9. Ispišite kapacitet vektora uz ostali tekst na konzoli.
  10. Ispišite najveći broj stavki koje vektor može sadržavati uz drugi tekst na konzoli.
  11. Promijenite veličinu vektora da sadrži samo 5 elemenata.
  12. Ispišite novu veličinu vektora uz ostali tekst.
  13. Provjerite nije li vektor prazan.
  14. Ispišite tekst na konzoli ako vektor nije prazan.
  15. Upotrijebite naredbu else da odredite što učiniti ako je vektor prazan.
  16. Tekst za ispis na konzoli ako je vektor prazan.
  17. Program mora vratiti vrijednost nakon uspješnog završetka.
  18. Kraj tijela funkcije main().

Pitanja i odgovori

Vektor je dinamički niz koji automatski mijenja veličinu i zna vlastitu veličinu, dok ugrađeni niz ima fiksnu duljinu postavljenu u vrijeme kompajliranja. Vektori upravljaju memorijom umjesto vas; sirovi nizovi to ne čine.

Za brzi izravni pristup koristite operator indeksa, kao što je nums[0]. Funkcija članica at(), kao i nums.at(0), radi isto, ali izbacuje iznimku out_of_range kada indeks nije valjan, što je čini sigurnijom.

Deklariraj vektor čiji su elementi sami vektori, na primjer vektor > mreža. Možete joj promijeniti veličinu pomoću konstruktora ili push_back redova. Svaki unutarnji vektor može rasti neovisno, što vam daje fleksibilnu matricu promjenjive veličine.

Vektor pohranjuje elemente u susjednu memoriju s brzim slučajnim pristupom, dok je std::list dvostruko povezana lista s brzim umetanjem ili brisanjem bilo gdje, ali bez izravnog indeksiranja. Odaberite na temelju svog obrasca pristupa.

Uključite zaglavlje algoritma i pozovite std::sort s početnim i završnim iteratorima, kao u sort(nums.begin(), nums.end()). Sortiranje je prema zadanim postavkama uzlazno; proslijedite prilagođeni komparator ili veći () za sortiranje silaznim redoslijedom.

Da. Vektor je predložak i može sadržavati bilo koji tip, uključujući niz znakova, prilagođene klase, pa čak i druge vektore. Deklarirajte tip elementa unutar kutnih zagrada, kao što je vektor ili vektor .

Da. Pomoćnici u AI kodiranju pretvaraju kratki upit ili komentar u funkcionalni vektorski kod, uključujući deklaraciju, petlje vraćanja i iteraciju. Uvijek pregledajte predložene tipove, granice i rukovanje kapacitetom, budući da AI može propustiti specifične zahtjeve projekta.

Da. GitHub kopilot predlaže deklaracije vektora, pozive push_back i insert te petlje iteratora dok tipkate. Dobro se nosi s ponavljajućim standardnim kodovima, iako biste ipak trebali provjeriti indekse, promjenu veličine i logiku prije kompajliranja.

Sažmite ovu objavu uz: