vectors stl
Rolle af vektorer i STL med eksempler.
Indtil videre har vi i denne C ++ - serie set statiske arrays, der har en fast størrelse.
Hvis vi midt i programmet skal gemme flere elementer i arrayet, bliver det umuligt, og vi er sikker på at få en 'out_of_bound' undtagelse, det øjeblik vi forsøger at gemme elementer uden for arraygrænserne.
En løsning på dette er at få arrayet deklareret med den maksimale kapacitet, så vi ikke finder noget problem med at gemme flere elementer under kørsel. Men dette arrangement har en alvorlig ulempe, idet vi spilder for meget hukommelse.
=> Tjek den komplette C ++ træningsserie her.
Svaret på alle disse problemer bruger et dynamisk array, der udvides alene, når behovet opstår. STL tilvejebringer dette dynamiske array i form af en vektorbeholder.
Hvad du lærer:
- Hvordan definerer vi vektorer?
- Erklæring om en vektor i C ++ med std :: Vektorklasse
- Initialiser Vector
- Vector Iterator
- Vektorfunktioner
- Vektorkapacitet
- Vector modifikatorer
- 2D-vektor
- Vektoreksempel
- Konklusion
- Anbefalet læsning
Hvordan definerer vi vektorer?
Vektorer er dynamiske array-containere, der automatisk ændrer størrelsen på det, når elementer indsættes eller slettes. Opbevaring af vektor håndteres af selve vektorbeholderen.
Elementerne i vektoren er lagret sammenhængende. Ligesom arrays kan vektorelementer også krydses og tilgås ved hjælp af iteratorer.
Erklæring om en vektor i C ++ med std :: Vektorklasse
I STL-vektorklasse ' std :: vektor 'Er defineret under overskriften. For at kunne bruge en vektorbeholder skal vi således inkludere denne overskrift i vores program som vist nedenfor:
#include
Vi kan erklære en tom vektor som vist nedenfor:
std::vector myvec;
Ovenstående kodelinje opretter en vektor med elementerne af typen heltal. Til hukommelse vil dette blive lagt ud som myvec.
Initialiser Vector
Vi kan initialisere en vektor med værdi på tidspunktet for erklæringen.
c ++ programmeringsinterviewspørgsmål
Dette gøres som følger:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
I ovenstående kode erklærer vi en vektor af typen int med navnet myvec indeholdende de første fem elementer i Fibonacci-sekvensen.
Hukommelseslayoutet for denne vektor vil være som nedenfor:
Vector Iterator
Som allerede nævnt bruger vi iteratorer til at krydse vektoren sekventielt.
Vektorer understøtter følgende iteratorfunktioner til at gå gennem elementerne:
- begynde() - Returnerer iterator peget på det første element i vektorbeholderen.
- slut () - Returnerer en iterator, der peger på det element, der følger det sidste element i vektoren.
- begynder () - Returnerer en omvendt iterator, der peger på det sidste element i vektorbeholderen.
- gengive () - Returnerer en omvendt iterator, der peger på det første element i vektorbeholderen.
- cbegin () - Returnerer en konstant iterator, der peger på det første element i vektorbeholderen.
- nogle få() - Returnerer en konstant iterator, der peger på elementet efter det sidste element i vektorbeholderen.
- crbegin () - Returnerer en omvendt konstant iterator, der peger på det sidste element i vektorbeholderen.
- crend () - Returnerer en omvendt konstant iterator, der peger på det første element i vektorbeholderen.
Lad os se et eksempel, der demonstrerer disse iteratorfunktioner.De andre funktioner kan bruges på samme måde.
#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; }
Produktion:
Output af Vector med start og slut: 2 3 4 5 6
Output af Vector med rbegin og rend: 6 5 4 3 2
Outputvektor af med cbegin og cend: 2 3 4 5 6
Outputvektor af med crbegin og crend: 6 5 4 3 2
I denne kode erklærer vi således en vektor og indsætter værdier i den ved hjælp af funktionen push_back. Derefter viser vi vektorerne ved hjælp af hver af iteratorfunktionerne, som vi beskrev ovenfor. Som du ser på output afhængigt af de anvendte iteratorfunktioner, ændres rækkefølgen, som vektoren vises i.
Vektorfunktioner
Sortering af en vektor
Vi kan bruge STL-algoritmer, som vi allerede har set på vektoren.
Nedenfor er eksemplet med brug af 'Sort' på vektoren.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Produktion:
Oprindelig vektor
10 50 30 20 60 40
Sorteret vektor
10 20 30 40 50 60
I ovenstående eksempel har vi initialiseret en vektor og derefter anvendt en sorteringsalgoritme til at sortere vektoren.
Udskrivning af elementer af en vektor
Vektorer kan udskrives ved hjælp af en iterator og 'cout' stream. Vi kan bruge en iterator til at gå gennem hvert af vektorelementerne og udskrive dem 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 << ' '; }
Produktion:
Output af Vector med start og slut: 3 4 5 6 7
Vektorkapacitet
Der er forskellige funktioner, der virker på vektorer for at bestemme dens størrelse, maksimale størrelse osv.
Vi viser funktionerne som nedenfor:
(i) Størrelsen på vektoren
Funktionsstørrelsen () returnerer antallet af elementer i vektorbeholderen. Dette er den indbyggede funktion af std :: vektorklasse og kan bruges direkte til at finde størrelsen på vektoren.
c ++ tilfældig talgenerator mellem to tal
Lad os se et eksempel på en vektor ved hjælp af funktionen størrelse ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Produktion:
Vektorstørrelse: 6
I ovenstående program har vi defineret en vektor myvec bestående af seks elementer. Dernæst kalder vi funktionen størrelse () på myvec, og den viser den korrekte størrelse.
(ii) Ændring af størrelse på en vektor
Vi kan også ændre størrelsen på en vektor til den ønskede størrelse, så den kan rumme 'n' antal elementer. Dette opnås ved 'resize ()' funktion af std :: vector class. Funktionen til størrelse ændrer vektorens størrelse som parameter og ændrer derefter størrelsen på vektorbeholderen til den angivne størrelse.
Lad os forstå dette ved hjælp af 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; }
Produktion:
Vektorelementer er: 1 1 2 3 5 8
Vektorstørrelse efter størrelse: 4
Vektorelementer efter ændring af størrelse er: 1 1 2 3
I ovenstående program definerer vi oprindeligt en vektor myvec af størrelse 6. Derefter kalder vi størrelsesfunktionen på denne vektor med størrelse = 4. Dette betyder, at vi vil ændre størrelsen på vores vektor til størrelse 4 nu.
Efter at have kaldt resize-funktionen udskriver vi vektoren igen. Vi ser, at når vi ændrer størrelsen på vektoren til størrelse 4, kasseres de resterende elementer, og kun de 4 elementer i vektoren vises.
Bortset fra størrelses- og størrelsesfunktioner understøtter vektorklassen også nogle flere funktioner, der giver os mulighed for at manipulere vektorens kapacitet. De er:
- max_størrelse (): Returnerer maksimal størrelse, dvs. det maksimale antal elementer, som vektoren kan rumme.
- kapacitet(): Returnerer størrelsen på aktuelt tildelt lagerplads. Dette returneres med hensyn til antallet af elementer.
- tom(): Kontrollerer, om containeren er tom.
- shrink_to_fit (): Krymper vektorkapaciteten, så den passer til størrelsen, og kasserer alle andre elementer.
- reservere(): Reserverer vektorkapaciteten til at indeholde n elementer.
Vector modifikatorer
Modifikatorer er operationer eller funktioner, der kan bruges til at ændre indholdet af vektorbeholderen. Vi ser nogle af de vigtigste funktioner, der bruges som modifikatorer.
Tildeling af nye værdier til vektor
En af de modifikationsfunktioner, der leveres af std :: vector, er tildelingsfunktionen. Tildel-funktion tildeler vektorer nye værdier ved at erstatte de gamle.
Dette demonstreres i det 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) << ' '; }
Produktion:
Vektorelementerne: 10 10 10 10 10
I ovenstående kode erklærer vi en vektor af typen int. Derefter kalder vi for at tildele en funktion med parametrene 5, 10. Det betyder, at vi agter at tildele element 10 til vektoren 5 gange. Når vi viser vektoren, ser vi, at vektoren har 5 elementer, alle med værdi 5.
Sletning af en vektor
Den næste funktion leveret af std :: vector til at ændre en vektor er funktionen 'slet'. Sletningsfunktion fjerner elementerne fra det angivne område eller en position fra vektoren.
Lad os se et eksempel på sletningsfunktionen.
#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: '< Produktion:
Vektorelementer: 1 1 2 3 5
Vektorstørrelse efter sletning: 4
Vektor efter sletning: 1 2 3 5
Som vist i ovenstående output til ændring af funktion, specificerer vi rækkevidden eller placeringen af det element, der skal slettes eller fjernes. I ovenstående eksempel har vi specificeret positionen, der peger på det første element i vektoren.
Indsæt elementer i vektoren
Vektorklassen std :: vektor giver endnu en funktion til at indsætte værdier i vektoren. Indsætningsfunktion giver os mulighed for at indsætte elementer i vektoren før den angivne position.
Dette vil være klart med det 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) << ' '; }
Produktion:
Indledende vektor: 2 3 4
Ny vektor efter indsættelse: 20 30 2 3 4
Ovennævnte program erklærer oprindeligt en vektor med 3 elementer. Derefter kalder vi indsætningsfunktionen to gange for at indsætte værdierne 20 og 30 i henholdsvis første og anden position i vektoren. Derefter viser vi den ændrede vektor.
Bytte vektorindhold
Vektorklassen giver os også muligheden for at bytte eller udveksle indholdet af en vektor med en anden vektor af samme type og størrelse. Dette opnås ved hjælp af vektor indbygget funktion 'swap'.
Overvej følgende stykke 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) << ' '; }
Produktion:
Vektor 1: 1 3
Vektor 2: 5 7
Efter bytte
Vektor 1: 5 7
Vektor 2: 1 3
Ovenstående kode viser indholdet af to vektorer før og efter bytte.
Rydning af værdier i vektoren
I modsætning til at fjerne et eller flere elementer fra vektoren ved hjælp af sletningsfunktionen, har vi en anden funktion 'Ryd', der giver os mulighed for at fjerne alle elementerne i vektorbeholderen.
I nedenstående program demonstrerer vi en klar funktion af vektorbeholderen.
#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: '< Produktion:
Størrelse på vektor v1: 4
Vektor 1: 1 3 5 7
Størrelse af vektor v1 efter opkald til clearfunction: 0
Her erklærer vi først en vektor og skubber derefter elementer ind i den. Når vi først kalder funktionen klar (), ser vi, at alle elementerne i vektoren fjernes på én gang.
ved (pos)
Denne funktion returnerer referencen til elementet i position 'pos' inden for vektoren.
Dette er en af de funktioner, der bruges til at få adgang til vektorelementet.
Et eksempel er givet nedenfor:
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Produktion:
Element i position 3: 3
Som vist i eksemplet bruges 'at' -funktionen til at få adgang til elementet i vektoren i den angivne position.
Foran
Funktion 'front' returnerer henvisningen til det første element i vektoren. Dette er endnu en funktion, som vi bruger til at få adgang til elementerne i vektorbeholderen.
Følgende eksempel viser brugen af 'front' funktion.
#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 Produktion:
Inputvektor: 1 1 2 3 5 8
Element foran på vektor: 1
Tilbage
På samme måde som 'front' -funktionen bruges back-funktionen til at få adgang til det sidste element i vektorbeholderen. Funktionen 'tilbage' returnerer en henvisning til det sidste element i vektorbeholderen.
Følgende eksempel viser brugen af 'tilbage' -funktionen.
#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 Produktion:
Inputvektor: 1 1 2 3 5 8
Element på bagsiden af vektoren: 8
Find et element i vektoren
Funktionen 'find' bruges til at finde ud af, om et bestemt element (kaldet nøgle) er til stede i vektoren eller ej. Denne funktion skal være hurtig og effektiv. Når værdien er fundet, vender funktionen tilbage.
Følgende eksempel viser brugen af find-funktionen.
#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'; }
Produktion:
Inputvektor: 1 1 2 3 5 8
Indtast nøglen, der skal søges: 0
Element ikke fundet
2D-vektor
To-dimensionel vektor er også kendt som 'Vector of Vector'. Ligesom to-dimensionelle arrays er elementer i to-dimensionelle vektorer også arrangeret i matrixformen.
Et eksempel på et program til 2D-vektor er angivet 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< Produktion:
2D-vektor:
1 3 5
7 9 11
13 15 17
I ovenstående eksempel skal du bemærke den måde, hvorpå 2D-vektoren er defineret. Det er defineret som en vektor inde i en anden vektor. Mens vi viser denne 2D-vektor, bruger vi den samme fremgangsmåde som at vise 2D-arrays.
Vektoreksempel
Nedenfor er et vektoreksempel, der indeholder de fleste af vektoroperationerne.
#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: '< Produktion:
Vektorelementerne: 10 10 10 10 10
Den nye vektor efter push_back: 10 10 10 10 10 5
Ny vektor efter pop_back: 10 10 10 10 10
Ny vektor efter indsættelse: 20 10 10 10 10 10
Vektorstørrelse efter sletning: 5
Efter sletning af første element: 10 10 10 10 10
Følgende er skærmbilledet for det samme.

I ovenstående eksempel erklærer vi en vektor og indtaster derefter elementer i vektoren ved hjælp af tildelings- og push_back-funktioner. Derefter bruger vi funktionen pop_back til at fjerne et element fra slutningen af vektoren. Derefter tilføjer vi igen et element til vektoren ved hjælp af indsætningselementet og sletter derefter elementet ved hjælp af sletningsfunktionen.
Dette er et ende-til-ende eksempel på vektorbeholderen, der demonstrerer dens forskellige funktioner.
Konklusion
Med dette er vi kommet til slutningen af denne tutorial om vektor.
I vores kommende vejledning lærer vi om 'liste' beholderen til STL, der svarer til linierne med arrays og vektorer.
bedste program til overvågning af CPU-temperatur
=> Tjek den perfekte C ++ træningsvejledning her.
Anbefalet læsning