vectors stl
Rollen til vektorer i STL med eksempler.
Så langt, i denne C ++ - serien, har vi sett statiske matriser som har en fast størrelse.
Hvis vi midt i programmet må lagre flere elementer i matrisen, blir det umulig, og vi er sikre på å få 'out_of_bound' unntak, i det øyeblikket vi prøver å lagre elementer utover arraygrensene.
En løsning på dette er å få matrisen deklarert med maksimal kapasitet, slik at vi ikke finner noe problem med å lagre flere elementer ved kjøretid. Men denne ordningen har en alvorlig ulempe ved at vi kaster bort for mye minne.
=> Sjekk den komplette C ++ treningsserien her.
Svaret på alle disse problemene er å bruke en dynamisk matrise som vil utvide seg selv etter hvert som behovet oppstår. STL gir denne dynamiske matrisen i form av en vektorbeholder.
Hva du vil lære:
- Hvordan definerer vi vektorer?
- Erklæring om en vektor i C ++ med std :: Vektorklasse
- Initialiser Vector
- Vector Iterator
- Vektorfunksjoner
- Vektorkapasitet
- Vector Modifiers
- 2D-vektor
- Vektoreksempel
- Konklusjon
- Anbefalt lesing
Hvordan definerer vi vektorer?
Vektorer er dynamiske array-beholdere som endrer størrelsen automatisk når elementer settes inn eller slettes. Lagring av vektor håndteres av selve vektorbeholderen.
Elementene i vektoren er lagret sammenhengende. Akkurat som matriser, kan vektorelementer også krysses og nås ved hjelp av iteratorer.
Erklæring om en vektor i C ++ med std :: Vektorklasse
I STL-vektorklasse ‘ std :: vektor ’Er definert under overskriften. Derfor, for å bruke en vektorbeholder, bør vi inkludere denne overskriften i programmet vårt som vist nedenfor:
#include
Vi kan erklære en tom vektor som vist nedenfor:
std::vector myvec;
Ovennevnte kodelinje vil opprette en vektor med elementene av typen heltall. Til minne vil dette bli lagt ut som myvec.
Initialiser Vector
Vi kan initialisere en vektor med verdi når vi erklærer den.
beste måten å rense registervinduer 10
Dette gjøres som følger:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
I koden ovenfor erklærer vi en vektor av typen int med navnet myvec som inneholder de fem første elementene i Fibonacci-sekvensen.
Minneoppsettet til denne vektoren vil være som nedenfor:
Vector Iterator
Som allerede nevnt bruker vi iteratorer til å krysse gjennom vektoren sekvensielt.
Vektorer støtter følgende iteratorfunksjoner for å gå gjennom elementene:
- begynne() - Returnerer iterator pekt på det første elementet i vektorbeholderen.
- slutt() - Returnerer en iterator som peker på elementet som følger det siste elementet i vektoren.
- begynner () - Returnerer en omvendt iterator som peker på det siste elementet i vektorbeholderen.
- gjengi () - Returnerer en omvendt iterator som peker på det første elementet i vektorbeholderen.
- cbegin () - Returnerer en konstant iterator som peker mot det første elementet i vektorbeholderen.
- Noen() - Returnerer en konstant iterator som peker mot elementet som følger det siste elementet i vektorbeholderen.
- crbegin () - Returnerer en omvendt konstant iterator som peker mot det siste elementet i vektorbeholderen.
- crend () - Returnerer en omvendt konstant iterator som peker mot det første elementet i vektorbeholderen.
La oss se et eksempel som vil demonstrere disse iteratorfunksjonene.De andre funksjonene kan brukes på samme måte.
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+1); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; cout << '
Output of Vector with rbegin and rend: '; for (auto itr = v1.rbegin(); itr != v1.rend(); ++itr) cout << *itr << ' '; cout << '
Output Vector of with cbegin and cend: '; for (auto itc = v1.cbegin(); itc != v1.cend(); ++itc) cout << *itc << ' '; cout << '
Output Vector of with crbegin and crend : '; for (auto icr = v1.crbegin(); icr != v1.crend(); ++icr) cout << *icr << ' '; return 0; }
Produksjon:
Produksjon av vektor med begynnelse og slutt: 2 3 4 5 6
Output of Vector with rbegin and rend: 6 5 4 3 2
Utgangsvektor av med cbegin og cend: 2 3 4 5 6
Utgangsvektor av med crbegin og crend: 6 5 4 3 2
Dermed i denne koden deklarerer vi en vektor og setter inn verdier i den ved hjelp av push_back-funksjonen. Deretter viser vi vektorene ved hjelp av hver av iteratorfunksjonene som vi beskrev ovenfor. Som du ser av utgangen, avhengig av iteratorfunksjonene som brukes, endres rekkefølgen som vektoren vises i.
Vektorfunksjoner
Sortere en vektor
Vi kan bruke STL-algoritmer som vi allerede har sett på vektoren.
Nedenfor er eksemplet med bruk av 'Sort' på vektoren.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Produksjon:
Originalvektor
10 50 30 20 60 40
Sortert vektor
10 20 30 40 50 60
I eksemplet ovenfor har vi initialisert en vektor og deretter brukt en sorteringsalgoritme for å sortere vektoren.
Utskrift av elementer av en vektor
Vektorer kan skrives ut ved å bruke en iterator- og ‘cout’-strøm. Vi kan bruke en iterator til å gå gjennom hvert av vektorelementene og skrive dem ut med cout.
Følgende eksempel viser dette:
#include #include using namespace std; int main() { vector v1; for (int i = 1; i <= 5; i++) v1.push_back(i+2); cout << 'Output of Vector with begin and end: '; for (auto i = v1.begin(); i != v1.end(); ++i) cout << *i << ' '; }
Produksjon:
Produksjon av vektor med begynnelse og slutt: 3 4 5 6 7
Vektorkapasitet
Det er forskjellige funksjoner som virker på vektorer for å bestemme størrelse, maksimal størrelse osv.
Vi viser funksjonene som nedenfor:
(i) Størrelse på vektoren
Funksjonsstørrelsen () returnerer antall elementer i vektorbeholderen. Dette er den innebygde funksjonen til std :: vektorklasse og kan brukes direkte til å finne størrelsen på vektoren.
forskjell mellom c c ++ og java
La oss se et eksempel på en vektor som bruker størrelsen () -funksjonen:
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Produksjon:
Vektorstørrelse: 6
I programmet ovenfor har vi definert en vektor myvec som består av seks elementer. Deretter kaller vi størrelsen () -funksjonen på myvec, og den viser riktig størrelse.
(ii) Endre størrelse på en vektor
Vi kan også endre størrelsen på en vektor til ønsket størrelse slik at den kan holde ‘n’ antall elementer. Dette oppnås ved ‘resize ()’ funksjon av std :: vector class. Endringsstørrelsesfunksjonen tar størrelsen på vektoren som parameter og endrer deretter størrelsen på vektorbeholderen til den angitte størrelsen.
La oss forstå dette ved hjelp av et eksempel.
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << '
Vector elements are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; myvec.resize(4); cout << '
Vector Size after resize: ' << myvec.size(); cout << '
Vector elements after resizing are: '; for (auto it = myvec.begin(); it != myvec.end(); it++) cout << *it << ' '; return 0; }
Produksjon:
Vektorelementer er: 1 1 2 3 5 8
Vektorstørrelse etter størrelse: 4
Vektorelementer etter endring av størrelse er: 1 1 2 3
I programmet ovenfor definerer vi i utgangspunktet en vektor myvec av størrelse 6. Deretter kaller vi størrelsesfunksjonen på denne vektoren med størrelse = 4. Dette betyr at vi vil endre størrelsen på vektoren vår til størrelse 4 nå.
Etter å ha ringt til størrelsesfunksjonen, skriver vi ut vektoren igjen. Vi ser at når vi endrer størrelsen på vektoren til størrelse 4, blir de gjenværende elementene kastet, og bare de fire elementene i vektoren vises.
Bortsett fra størrelse og størrelse på funksjoner, støtter vektorklasse også noen flere funksjoner som lar oss manipulere kapasiteten til vektoren. De er:
- max_size (): Returnerer maksimal størrelse, dvs. maksimalt antall elementer vektoren kan inneholde.
- kapasitet(): Returnerer størrelsen på lagringsplass som nå er tildelt. Dette returneres når det gjelder antall elementer.
- tømme(): Sjekker om beholderen er tom.
- krymp for å passe(): Krymper vektorkapasiteten slik at den passer til størrelsen og forkaster alle andre elementer.
- reservere(): Reserverer vektorkapasiteten til å inneholde n elementer.
Vector Modifiers
Modifikatorer er operasjoner eller funksjoner som kan brukes til å endre innholdet i vektorbeholderen. Vi vil se noen av hovedfunksjonene som brukes som modifikatorer.
Tilordne nye verdier til vektor
En av modifikasjonsfunksjonene levert av std :: vector er tilordningsfunksjonen. Tildel funksjon tildeler nye verdier til vektor ved å erstatte de gamle.
Dette demonstreres i følgende eksempel.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Produksjon:
Vektorelementene: 10 10 10 10 10
I koden ovenfor erklærer vi en vektor av typen int. Så kaller vi for å tildele en funksjon med parametrene 5, 10. Dette betyr at vi har til hensikt å tildele element 10 til vektoren 5 ganger. Når vi viser vektoren, ser vi at vektoren har 5 elementer, alle med verdi 5.
Slette en vektor
Neste funksjon levert av std :: vector for å modifisere en vektor er 'slett' -funksjonen. Slettefunksjon fjerner elementene fra det angitte området eller en posisjon fra vektoren.
La oss se et eksempel på Slett-funksjonen.
#include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5}; cout << '
Vector elements:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Produksjon:
Vektorelementer: 1 1 2 3 5
Vektorstørrelse etter sletting: 4
Vektor etter sletteoperasjon: 1 2 3 5
Som vist i ovenstående utgang for endring av funksjon, spesifiserer vi rekkevidden eller posisjonen til elementet som skal slettes eller fjernes. I eksemplet ovenfor har vi spesifisert posisjonen som peker mot det første elementet i vektoren.
Sett inn elementer i vektoren
Vektorklassen std :: vektoren gir enda en funksjon for å sette inn verdier i vektoren. Sett inn funksjonen lar oss sette inn elementer i vektoren før den angitte posisjonen.
Dette vil være tydelig med følgende eksempel.
#include #include using namespace std; int main() { // Assign vector vector myvec = {2,3,4}; cout << '
Initial vector: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning, 30 after that myvec.insert(myvec.begin(), 20); myvec.insert(myvec.begin()+1,30); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; }
Produksjon:
Innledende vektor: 2 3 4
Ny vektor etter innsats: 20 30 2 3 4
Ovennevnte program erklærer en vektor med 3 elementer i utgangspunktet. Deretter kaller vi innsettingsfunksjonen to ganger for å sette inn verdiene 20 og 30 i henholdsvis første og andre posisjon i vektoren. Deretter viser vi den endrede vektoren.
Bytte vektorinnhold
Vektorklassen gir oss også muligheten til å bytte eller utveksle innholdet i en vektor med den til en annen vektor av samme type og størrelse. Dette oppnås ved hjelp av vektor innebygd funksjon ‘swap’.
Tenk på følgende kode.
#include #include using namespace std; int main() { // swap operation vector v1, v2; v1.push_back(1); v1.push_back(3); v2.push_back(5); v2.push_back(7); cout << '
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; // Swaps v1 and v2 v1.swap(v2); cout << '
After Swap
Vector 1: '; for (int i = 0; i < v1.size(); i++) cout << v1(i) << ' '; cout << '
Vector 2: '; for (int i = 0; i < v2.size(); i++) cout << v2(i) << ' '; }
Produksjon:
Vektor 1: 1 3
Vektor 2: 5 7
Etter bytte
Vektor 1: 5 7
Vektor 2: 1 3
Ovennevnte kode viser innholdet i to vektorer før og etter bytte.
Slette verdier i vektoren
I motsetning til å fjerne ett eller flere elementer fra vektoren ved å bruke slettingsfunksjonen, har vi en annen funksjon ‘Clear’ som lar oss fjerne alle elementene i vektorbeholderen.
I programmet nedenfor viser vi en klar funksjon av vektorbeholderen.
beste programvaren for å optimalisere Windows 10
#include #include using namespace std; int main() { // swap operation vector v1; v1.push_back(1); v1.push_back(3); v1.push_back(5); v1.push_back(7); cout<<'
Size of vector v1: '< Produksjon:
Størrelse på vektor v1: 4
Vektor 1: 1 3 5 7
Størrelse på vektor v1 etter samtale for å fjerne funksjon: 0
Her erklærer vi først en vektor og skyver deretter elementer inn i den. Når vi kaller funksjonen klar (), ser vi at alle elementene i vektoren fjernes på en gang.
kl (pos)
Denne funksjonen returnerer referansen til elementet i posisjon ‘pos’ i vektoren.
Dette er en av funksjonene som brukes til å få tilgang til vektorelementet.
Et eksempel er gitt nedenfor:
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Produksjon:
Element i posisjon 3: 3
Som vist i eksemplet brukes ‘at’ -funksjonen for å få tilgang til elementet i vektoren på den angitte posisjonen.
Front
Funksjonen 'front' returnerer referansen til det første elementet i vektoren. Dette er enda en funksjon som vi bruker for å få tilgang til elementene i vektorbeholderen.
Følgende eksempel viser bruken av 'front' funksjon.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Produksjon:
Inngangsvektor: 1 1 2 3 5 8
Element foran på vektor: 1
Tilbake
I likhet med 'front' -funksjonen brukes bakfunksjonen for å få tilgang til det siste elementet i vektorbeholderen. Funksjonen ‘tilbake’ returnerer en referanse til det siste elementet i vektorbeholderen.
Følgende eksempel viser bruken av 'tilbake' -funksjonen.
#include #include #include using namespace std; int main() { // Initialize vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();it Produksjon:
Inngangsvektor: 1 1 2 3 5 8
Element på baksiden av vektoren: 8
Finn et element i vektoren
Funksjonen ‘finn’ brukes til å finne ut om et bestemt element (referert til som nøkkel) er tilstede i vektoren eller ikke. Denne funksjonen skal være rask og effektiv. Når verdien er funnet, returnerer funksjonen.
Følgende eksempel viser bruken av finn-funksjonen.
#include #include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Input vector: '; for(auto it=myvec.begin();itkey; if(find(myvec.begin(),myvec.end(),key)!= myvec.end()) cout<<'
Element found'; else cout<<'
Element not found'; }
Produksjon:
Inngangsvektor: 1 1 2 3 5 8
Skriv inn nøkkelen du vil søke etter: 0
Element ikke funnet
2D-vektor
To-dimensjonal vektor er også kjent som ‘Vector of Vector”. Akkurat som todimensjonale matriser arrangeres også elementer av todimensjonale vektorer i matriseformen.
Et eksempel på program for 2D-vektor er gitt nedenfor.
#include #include // for 2D vector using namespace std; int main() { // Initializing 2D vector 'odd_vect' with vector odd_vect{ { 1, 3, 5 }, { 7, 9, 11 }, { 13,15,17 } }; // Displaying the 2D vector cout<<'2D vector : '; cout< Produksjon:
2D-vektor:
1 3 5
7 9 11
13 15 17
I eksemplet ovenfor, legg merke til måten 2D-vektoren er definert på. Det er definert som en vektor inne i en annen vektor. Mens vi viser denne 2D-vektoren, bruker vi samme tilnærming som å vise 2D-arrays.
Vektoreksempel
Nedenfor er et vektoreksempel som inneholder de fleste vektoroperasjonene.
#include #include using namespace std; int main() { // Assign vector vector myvec; // assign value 10 5 times myvec.assign(5, 10); cout << 'The vector elements: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // push value 5 in myvec myvec.push_back(5); int n = myvec.size(); cout << '
The new vector after push_back:'; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // pop the element myvec.pop_back(); cout<<'
New vector after pop_back : '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // inserts 20 at the beginning myvec.insert(myvec.begin(), 20); cout << '
New vector after insert: '; for (int i = 0; i < myvec.size(); i++) cout << myvec(i) << ' '; // remove the first element myvec.erase(myvec.begin()); cout<<'
Vector size after erase: '< Produksjon:
Vektorelementene: 10 10 10 10 10
Den nye vektoren etter push_back: 10 10 10 10 10 5
Ny vektor etter pop_back: 10 10 10 10 10
Ny vektor etter innsetting: 20 10 10 10 10 10
Vektorstørrelse etter sletting: 5
Etter sletting av første element: 10 10 10 10 10
Følgende er skjermbildet for det samme.

I eksemplet ovenfor erklærer vi en vektor, og deretter bruker vi tildelings- og push_back-funksjoner til å legge inn elementer i vektoren. Deretter bruker vi funksjon pop_back for å fjerne et element fra enden av vektoren. Etter det legger vi igjen ett element til vektoren ved hjelp av innsettingselementet og sletter deretter elementet ved hjelp av slettingsfunksjonen.
Dette er et ende-til-ende-eksempel på vektorbeholderen som viser dens forskjellige funksjoner.
Konklusjon
Med dette har vi kommet til slutten av denne veiledningen om vektor.
I vår kommende opplæring vil vi lære om 'liste' beholderen til STL, som ligner linjene med matriser og vektorer.
=> Sjekk ut den perfekte C ++ treningsguiden her.
Anbefalt lesing