vectors stl
Vloga vektorjev v STL s primeri.
Do zdaj smo v tej seriji C ++ videli statične nize, ki imajo fiksno velikost.
Če moramo sredi programa shraniti več elementov v matriko, potem to postane nemogoče in zagotovo bomo dobili izjemo 'out_of_bound', v trenutku, ko bomo poskušali elemente shraniti preko meja polja.
Ena od rešitev za to je deklariranje polja z največjo zmogljivostjo, tako da ne bomo našli težav pri shranjevanju več elementov med izvajanjem. Toda ta ureditev ima resno pomanjkljivost, saj zapravljamo preveč spomina.
=> Tukaj si oglejte celotno serijo usposabljanj za C ++
Odgovor na vsa ta vprašanja je uporaba dinamičnega polja, ki se bo razširilo samo po potrebi. STL zagotavlja to dinamično matriko v obliki vektorskega vsebnika.
Kaj se boste naučili:
- Kako določimo vektorje?
- Razglasitev vektorja v jeziku C ++ s std :: Vector Class
- Inicializirajte vektor
- Vector Iterator
- Vektorske funkcije
- Vektorska zmogljivost
- Vektorski modifikatorji
- 2D vektor
- Primer vektorja
- Zaključek
- Priporočeno branje
Kako določimo vektorje?
Vektorji so vsebniki dinamičnih nizov, ki mu samodejno spremenijo velikost, ko se elementi vstavijo ali izbrišejo. S shranjevanjem vektorja skrbi sam vektorski vsebnik.
Elementi v vektorju so shranjeni na sosednjih lokacijah. Tako kot nizi je tudi preko vektorskih elementov mogoče iti in do njih dostopati s pomočjo iteratorjev.
Razglasitev vektorja v jeziku C ++ s std :: Vector Class
V vektorskem razredu STL std :: vektor Je definirano pod naslovom. Da bi uporabili vektorski vsebnik, bi morali zato vključiti to glavo v naš program, kot je prikazano spodaj:
#include Lahko označimo prazen vektor, kot je prikazano spodaj:
std::vector myvec; Zgornja vrstica kode bo ustvarila vektor z elementi tipa integer. V spomin bo to postavljeno kot myvec.
Inicializirajte vektor
Vektor lahko inicializiramo z vrednostjo v času njegove razglasitve.
Vprašanja za internetske storitve .net
To se naredi na naslednji način:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }V zgornji kodi razglasimo vektor tipa int z imenom myvec, ki vsebuje prvih pet elementov v Fibonaccijevem zaporedju.
Postavitev pomnilnika tega vektorja bo naslednja:

Vector Iterator
Kot smo že omenili, uporabljamo iteratorje za zaporedno prehajanje skozi vektor.
Vektorji podpirajo naslednje iteratorske funkcije za prehod skozi elemente:
- začeti() - Vrne iterator, usmerjen na prvi element vektorskega vsebnika.
- konec () - Vrne iterator, ki kaže na element, ki sledi zadnjemu elementu v vektorju.
- rbegin () - Vrne povratni iterator, ki kaže na zadnji element v vektorskem vsebniku.
- render () - Vrne povratni iterator, ki kaže na prvi element vektorskega vsebnika.
- cbegin () - Vrne konstantni iterator, ki kaže na prvi element v vektorskem vsebniku.
- nekaj() - Vrne konstantni iterator, ki kaže na element, ki sledi zadnjemu elementu vektorskega vsebnika.
- crbegin () - Vrne povratni konstantni iterator, ki kaže na zadnji element v vektorskem vsebniku.
- crend () - Vrne povratni konstantni iterator, ki kaže na prvi element v vektorskem vsebniku.
Poglejmo primer, ki bi prikazal te iteratorske funkcije.Druge funkcije lahko uporabljamo podobno.
#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; }Izhod:
Izhod vektorja z začetkom in koncem: 2 3 4 5 6
Izhod vektorja z rbegin in rend: 6 5 4 3 2
Izhodni vektor za cbegin in cend: 2 3 4 5 6
Izhodni vektor z crbegin in crend: 6 5 4 3 2
Tako v tej kodi razglasimo vektor in vanj vstavimo vrednosti s pomočjo funkcije push_back. Nato prikažemo vektorje z vsako od zgoraj opisanih funkcij iteratorja. Kot vidite iz izhoda, odvisno od uporabljenih funkcij iteratorja, se vrstni red prikaza vektorja spremeni.
Vektorske funkcije
Razvrščanje vektorja
Lahko uporabimo algoritme STL, ki smo jih že videli na vektorju.
Spodaj je primer uporabe 'Razvrsti' na vektorju.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Izhod:
Original Vector
10 50 30 20 60 40
Razvrščen vektor
10 20 30 40 50 60
V zgornjem primeru smo inicializirali vektor in nato uporabili algoritem za razvrščanje za razvrščanje vektorja.
Tiskanje elementov vektorja
Vektorje lahko natisnemo s pomočjo iteratorja in toka 'cout'. Z iteratorjem lahko prestopimo skozi vsakega od vektorskih elementov in jih natisnemo s cout.
Naslednji primer prikazuje to:
#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 << ' '; } Izhod:
Izhod vektorja z začetkom in koncem: 3 4 5 6 7
Vektorska zmogljivost
Obstajajo različne funkcije, ki vplivajo na vektorje, da določijo njegovo velikost, največjo velikost itd.
Funkcije navajamo spodaj:
(i) Velikost vektorja
Velikost funkcije () vrne število elementov v vektorskem vsebniku. To je vgrajena funkcija razreda std :: vector in jo lahko neposredno uporabimo za iskanje velikosti vektorja.
kar je bolje java ali c ++
Oglejmo si primer vektorja z uporabo funkcije size ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; } Izhod:
Velikost vektorja: 6
V zgornjem programu smo definirali vektor myvec, sestavljen iz šestih elementov. Nato pokličemo funkcijo size () na myvec in prikaže pravilno velikost.
(ii) Spreminjanje velikosti vektorja
Vektor lahko tudi prilagodimo na želeno velikost, tako da lahko vsebuje ‘n’ število elementov. To dosežemo s funkcijo 'resize ()' razreda std :: vector. Funkcija spreminjanja velikosti za parameter vzame velikost vektorja, nato pa vsebnik vektorja spremeni na določeno velikost.
Razumimo to s pomočjo primera.
#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; } Izhod:
Vektorski elementi so: 1 1 2 3 5 8
Velikost vektorja po velikosti: 4
Vektorski elementi po spreminjanju velikosti so: 1 1 2 3
V zgornjem programu sprva določimo vektor myvec velikosti 6. Nato pokličemo funkcijo za spreminjanje velikosti tega vektorja z velikostjo = 4. To pomeni, da želimo zdaj spremeniti svoj vektor na velikost 4.
Po klicu funkcije za spreminjanje velikosti znova natisnemo vektor. Vidimo, da ko spremenimo velikost vektorja na velikost 4, se preostali elementi zavržejo in prikažejo se le 4 elementi vektorja.
Razred vektorja poleg funkcij velikosti in velikosti podpira tudi nekatere druge funkcije, ki nam omogočajo manipulacijo z zmogljivostjo vektorja. To so:
- največja velikost (): Vrne največjo velikost, tj. Največje število elementov, ki jih lahko vsebuje vektor.
- zmogljivost (): Vrne velikost trenutno dodeljenega prostora za shranjevanje. To se vrne glede na število elementov.
- prazno(): Preveri, ali je vsebnik prazen.
- shrink_to_fit (): Zmanjša vektorsko zmogljivost, da ustreza velikosti, in zavrže vse druge elemente.
- rezerva (): Rezervira vektorsko sposobnost, da vsebuje n elementov.
Vektorski modifikatorji
Modifikatorji so operacije ali funkcije, ki se lahko uporabljajo za spreminjanje vsebine vektorskega vsebnika. Videli bomo nekaj glavnih funkcij, ki se uporabljajo kot modifikatorji.
Dodeljevanje novih vrednosti vektorju
Ena od funkcij modifikatorjev, ki jih ponuja std :: vector, je funkcija dodelitve. Funkcija Assign vektorju dodeli nove vrednosti z zamenjavo starih.
To je prikazano v naslednjem primeru.
#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) << ' '; } Izhod:
Elementi vektorja: 10 10 10 10 10
V zgornji kodi razglasimo vektor tipa int. Nato pokličemo, da dodelimo funkcijo s parametri 5, 10. To pomeni, da nameravamo element 10 vektorju dodeliti 5-krat. Ko prikažemo vektor, vidimo, da ima vektor 5 elementov, vsi z vrednostjo 5.
Brisanje vektorja
Naslednja funkcija, ki jo std :: vector ponuja za spreminjanje vektorja, je funkcija 'brisanje'. Funkcija brisanja odstrani elemente iz določenega obsega ali položaja iz vektorja.
Oglejmo si primer funkcije brisanja.
#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: '< Izhod:
Vektorski elementi: 1 1 2 3 5
Velikost vektorja po brisanju: 4
Vektor po operaciji brisanja: 1 2 3 5
Kot je prikazano v zgornjem izhodu za funkcijo spreminjanja velikosti, določimo obseg ali položaj elementa, ki ga želimo izbrisati ali odstraniti. V zgornjem primeru smo določili položaj, ki kaže na prvi element v vektorju.
Vstavite elemente v vektor
Vektorski razred std :: vector ponuja še eno funkcijo za vstavljanje vrednosti v vektor. Funkcija Insert nam omogoča vstavljanje elementov v vektor pred določenim položajem.
To bo jasno z naslednjim primerom.
#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) << ' '; } Izhod:
Začetni vektor: 2 3 4
Nov vektor po vstavku: 20 30 2 3 4
Zgornji program na začetku razglasi vektor s 3 elementi. Nato dvakrat pokličemo funkcijo za vstavljanje, da vstavimo vrednosti 20 in 30 na prvi in drugi položaj v vektor. Nato prikažemo spremenjeni vektor.
Zamenjava vektorske vsebine
Razred vektorjev nam omogoča tudi zamenjavo ali izmenjavo vsebine enega vektorja z drugim vektorjem iste vrste in velikosti. To dosežemo z vektorsko vgrajeno funkcijo 'swap'.
Razmislite o naslednjem delu 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) << ' '; } Izhod:
Vektor 1: 1 3
Vektor 2: 5 7
Po zamenjavi
Vektor 1: 5 7
Vektor 2: 1 3
Zgornja koda prikazuje vsebino dveh vektorjev pred zamenjavo in po njej.
Čiščenje vrednosti v vektorju
V nasprotju z odstranjevanjem enega ali več elementov iz vektorja s funkcijo brisanja imamo še eno funkcijo 'Clear', ki nam omogoča odstranitev vseh elementov v vektorski posodi.
V spodnjem programu prikazujemo jasno funkcijo vektorskega vsebnika.
#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: '< Izhod:
Velikost vektorja v1: 4
Vektor 1: 1 3 5 7
Velikost vektorja v1 po klicu na jasno funkcijo: 0
Tu najprej deklariramo vektor in nato vanj potisnemo elemente. Ko funkcijo pokličemo clear (), vidimo, da se vsi elementi v vektorju odstranijo hkrati.
ob (poz)
Ta funkcija vrne sklic na element na položaju 'pos' znotraj vektorja.
To je ena od funkcij, ki se uporablja za dostop do vektorskega elementa.
Spodaj je naveden primer:
kar vidite, je tisto, kar dobite v spletnem graditelju
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Izhod:
Element na položaju 3: 3
Kot je prikazano v primeru, se funkcija 'at' uporablja za dostop do elementa v vektorju na določenem položaju.
Spredaj
Funkcija 'front' vrne sklic na prvi element vektorja. To je še ena funkcija, ki jo uporabljamo za dostop do elementov vektorskega vsebnika.
Naslednji primer prikazuje uporabo funkcije 'spredaj'.
#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 Izhod:
Vhodni vektor: 1 1 2 3 5 8
Element na sprednji strani vektorja: 1
Nazaj
Podobno kot funkcija 'spredaj' se tudi funkcija zadnja uporablja za dostop do zadnjega elementa vektorskega vsebnika. Funkcija 'nazaj' vrne sklic na zadnji element v vektorskem vsebniku.
Naslednji primer prikazuje uporabo funkcije „nazaj“.
#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 Izhod:
Vhodni vektor: 1 1 2 3 5 8
Element na zadnji strani vektorja: 8
Poiščite element v vektorju
Funkcija 'najdi' se uporablja za iskanje, ali je določen element (imenovan ključ) prisoten v vektorju ali ne. Ta funkcija naj bi bila hitra in učinkovita. Ko je vrednost najdena, se funkcija vrne.
Naslednji primer prikazuje uporabo funkcije iskanja.
#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'; } Izhod:
Vhodni vektor: 1 1 2 3 5 8
Vnesite ključ za iskanje: 0
Elementa ni mogoče najti
2D vektor
Dvodimenzionalni vektor je znan tudi kot 'vektor vektorja'. Tako kot dvodimenzionalna polja so tudi elementi dvodimenzionalnih vektorjev razporejeni v matrični obliki.
Primer programa za 2D vektor je podan spodaj.
#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< Izhod:
2D vektor:
1 3 5
7 9 11
13 15 17
V zgornjem primeru upoštevajte način definiranja 2D vektorja. Opredeljen je kot vektor znotraj drugega vektorja. Med prikazom tega 2D vektorja uporabljamo enak pristop kot prikaz 2D nizov.
Primer vektorja
Spodaj je vektorski primer, ki vsebuje večino vektorskih operacij.
#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: '< Izhod:
Elementi vektorja: 10 10 10 10 10
Novi vektor po push_back: 10 10 10 10 10 5
Nov vektor po pop_back: 10 10 10 10 10
Nov vektor po vstavku: 20 10 10 10 10 10
Velikost vektorja po brisanju: 5
Po brisanju prvega elementa: 10 10 10 10 10
Sledi posnetek zaslona za isto.

V zgornjem primeru razglasimo vektor in nato s funkcijami assign in push_back vnesemo elemente v vektor. Nato s funkcijo pop_back odstranimo element s konca vektorja. Po tem z vektorskim elementom znova dodamo en element in nato element izbrišemo s funkcijo brisanja.
To je primer končnega primera vektorskega vsebnika, ki prikazuje svoje različne funkcije.
Zaključek
S tem smo prišli do konca te vaje o vektorju.
V naši prihajajoči vadnici bomo izvedeli več o vsebniku STL, ki je podoben vrsticam nizov in vektorjev.
=> Tukaj si oglejte Perfect Guide za usposabljanje za C ++.
Priporočeno branje
