Klasse og gjenstander
En klasse er et sett med variabler og funksjoner som fungerer sammen, der variablene ikke har verdsatte verdier. Når verdier er tilordnet variablene, blir en klasse et objekt. Ulike verdier gitt til samme klasse resulterer i forskjellige objekter; det vil si at forskjellige objekter kan være av samme klasse, men har forskjellige verdier. Å opprette et objekt fra en klasse er også kjent som å instantisere objektet.
Begrepet vektor beskriver en klasse. Et objekt opprettet fra en vektor har et navn som er valgt av programmereren.
En funksjon som tilhører en klasse er nødvendig for å instantisere et objekt fra klassen. I C ++ har den funksjonen samme navn som navnet på klassen. Ulike objekter opprettet (instantiert) fra klassen har tydelige navn gitt til hver av dem av programmereren.
Å lage et objekt fra en klasse betyr å konstruere objektet; Det betyr også å instantisere objektet.
Vektorklassen
Vektorklassen er allerede definert og er i biblioteket. For å bruke vektorklassen, må en programmerer inkludere vektoroverskriften i filen med følgende forbehandlingsdirektiv:
#inkludere
Når overskriften er inkludert, blir alle vektorfunksjonene (datamedlemmer og medlemsfunksjoner) tilgjengelige. For å bruke telleobjektet til å sende ut data til terminalen (konsollen), må også objektoverskriften være inkludert. For å skrive et program med vektoren, som et minimum, må følgende overskrifter inkluderes:
#inkludere
#inkludere
Instortering av en vektor
int foo [10];
Over er erklæringen om en matrise med navnet “Foo” og antall elementer “10.”Dette er en rekke heltall. Erklæringen om en vektor er lik. For en vektor er antall elementer valgfritt, siden vektorklengden kan øke eller redusere.
På dette tidspunktet i programmet har vektorklassen allerede blitt definert i biblioteket, og overskriften er inkludert. Vektoren kan instantieres som følger:
std :: vektorVTR (8);
Her er vektoren av den spesielle konstruktørfunksjonen. Hvilken type data vektoren vil inneholde er "int" i vinkelfester. Begrepet “VTR” er navnet valgt av programmereren for vektoren. Til slutt, "8", i parenteser, er det tentative antallet heltall vektoren vil ha.
Begrepet “STD” står for standard navneområde. Dette begrepet må følges av en dobbel kolon, i denne sammenhengen. Hvem som helst kan skrive sitt eget vektorklassebibliotek og bruke det. Imidlertid har C ++ allerede et standardbibliotek med standardnavn, inkludert “Vector.”For å bruke et standardnavn, må standardnavnet inngås av STD :: . For å unngå å skrive std :: Hver gang i programmet for et standardnavn, kan programfilen starte som følger:
#inkludere
#inkludere
ved hjelp av navneområdet STD;
Overbelastning av en funksjon
Når to eller flere forskjellige funksjonssignaturer har samme navn, sies det navnet å være overbelastet. Når en funksjon kalles, bestemmer antallet og typen argumenter hvilken funksjon som utføres.
Konstruere en vektor
Å konstruere en vektor betyr å instruentere (skape) et vektorobjekt. Konstruktørfunksjonen er overbelastet som følger:
Vektornavn
Dette skaper en vektor med lengde null og type “t.”Følgende uttalelse oppretter en vektor med null lengde på typen“ float ”med navnet“ VTR: ”
vektorVTR;
Vektornavn (N)
Dette skaper en vektor med n elementer av type “t.”En uttalelse for denne vektoren med fire floatelementer er som følger:
vektorVTR (4);
Vektornavn (N, T)
Dette skaper en vektor av n elementer som er initialisert til verdien t. Følgende uttalelse oppretter en vektor på 5 elementer, der hvert element har verdien 3.4:
vektorVTR (5, 3.4);
Konstruere med initialisering
En vektor kan konstrueres (opprettes) og initialiseres samtidig, på en av de følgende to måtene:
vektorVTR = 1.1, 2.2, 3.3, 4.4;
Eller
vektorVTR 1.1, 2.2, 3.3, 4.4;
Merk at det ikke er noen parenteser like etter objektnavnet. Parenteser som brukes rett etter at objektnavnet skal ha initialiseringslisten, som følger:
vektorVTR (1.1, 2.2, 3.3, 4.4);
En vektor kan konstrueres og initialiseres senere med initialisatorlisten. I dette tilfellet vil ikke parentesene bli brukt:
vektorVTR;
VTR = 1.1, 2.2, 3.3, 4.4;
vektor v2 (v1)
Dette er en kopikonstruktør. Det skaper en vektor v2 som en kopi av vektoren V1. Følgende kode illustrerer dette:
vektorVTR1 (5, 3.4);
vektorVTR2 (VTR1);
Tilordne en vektor under konstruksjonen
Under konstruksjonen kan en tom vektor opprettes mens en annen blir tildelt den, som følger:
vektorVTR1 1.1, 2.2, 3.3, 4.4;
vektorVTR2 = VTR1;
Den andre uttalelsen tilsvarer:
vektorVTR2 = 1.1, 2.2, 3.3, 4.4;
const vektor
En Const -vektor er en vektor hvis elementer ikke kan endres. Verdiene i denne vektoren er skrivebeskyttet. Når den opprettes, vises vektoren som følger:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
I denne vektortypen kan ikke noe element legges til eller fjernes. Dessuten kan ingen verdi endres.
Konstruere med iterator
En mal gir en generisk representasjon for en datatype. En iterator gir en generisk representasjon av skanning gjennom verdiene til en beholder. Syntaksen for å lage en vektor med en iterator er som følger:
mal
vektor (inputIterator først, inputiterator sist, const allocator & = allocator ());
Dette konstruerer en vektor for området [først, sist) ved hjelp av den spesifiserte allokatoren, som vil bli diskutert senere i denne artikkelen.
Ødelegger en vektor
For å ødelegge en vektor, kan du bare la den gå ut av omfang og ødeleggelse håndteres automatisk.
Vektorkapasitet
størrelse_type kapasitet () const noExcept
Det totale antall elementer Vektoren kan holde uten å kreve omfordeling returneres av kapasitetsmedlemfunksjonen. Et kodesegment for dette er som følger:
vektorVTR (4);
int num = VTR.kapasitet();
cout << num << '\n';
Utgangen er 4.
reserve (n)
Minneområdet er ikke alltid fritt tilgjengelig. Ekstra plass kan reserveres på forhånd. Tenk på følgende kodesegment:
vektorVTR (4);
VTR.reserve (6);
cout << vtr.capacity() << '\n';
Utgangen er 6. Så den ekstra plassen som er reservert er 6 - 4 = 2 elementer. Funksjonen returnerer tomrom.
størrelse () const nowexcept
Dette returnerer antall elementer i vektoren. Følgende kode illustrerer denne funksjonen:
vektorVTR (4);
Float Sz = VTR.størrelse();
cout << sz << '\n';
Utgangen er 4.
krymp for å passe()
Etter å ha gitt ekstra kapasitet til en vektor med reserve () -funksjonen, kan vektoren dimensjoneres for å passe til sin opprinnelige størrelse. Følgende kode illustrerer dette:
vektorVTR (4);
VTR.reserve (6);
VTR.krymp for å passe();
int sz = VTR.størrelse();
cout << sz << '\n';
Utgangen er 4 og ikke 6. Funksjonen returnerer tomrom.
Størrelse (SZ), Endre størrelse (SZ, C)
Dette endrer størrelsen på vektoren. Hvis den nye størrelsen er mindre enn den gamle størrelsen, blir elementene mot slutten slettet. Hvis den nye størrelsen er lengre, blir det lagt til en viss standardverdi mot slutten. For å ha en bestemt verdiøkning, bruk Endre størrelse () -funksjonen med to argumenter. Følgende kodesegment illustrerer bruken av disse to funksjonene:
vektorVTR1 1.1, 2.2, 3.3, 4.4;
VTR1.endre størrelse (2);
cout << "New size of vtr1: " << vtr1.size() << '\n';
vektorVTR2 1.1, 2.2;
VTR2.Endre størrelse (4, 8.8);
cout << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
""<< vtr2[2] <<" "<< vtr2[3] << '\n';
Utgangen er følgende:
Ny størrelse på VTR1: 2
VTR2: 1.1 2.2 8.8 8.8
Funksjonene returnerer tomrom.
tomt () const nowexcept
Denne funksjonen returnerer 1 for sann hvis det ikke er noen elementer i vektoren og 0 for usant hvis vektoren er tom. Hvis en vektor har 4 lokasjoner for en bestemt type data, for eksempel float, uten noen flyteverdi, er den vektoren ikke tom. Følgende kode illustrerer dette:
vektorVTR;
cout << vtr.empty() << '\n';
vektorVT (4);
cout << vt.empty() << '\n';
vektorV (4,3.5);
cout << v.empty() << '\n';
Utgangen er følgende:
1Vektorelementtilgang
En vektor kan være underskrevet (indeksert) som en matrise. Indekstelling begynner fra null.
Vectorname [i]
Operasjonen “Vectorname [i]” returnerer en referanse til elementet på ith indeks for vektoren. Følgende kodeutganger 3.3 for ovennevnte vektor:
vektorVTR 1.1, 2.2, 3.3, 4.4;
float fl = vtr [2];
cout << fl << '\n';
Vectorname [i] const
Operasjonen “Vectorname [i] const” utføres i stedet for “Vectorname [i]” når vektoren er en konstant vektor. Denne operasjonen brukes i følgende kode:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
float fl = vtr [2];
cout << fl << '\n';
Uttrykket returnerer en konstant referanse til ith elementet i vektoren.
Tilordne en verdi med abonnement
En verdi kan tilordnes en ikke-konstant vektor, som følger:
vektorVTR 1.1, 2.2, 3.3, 4.4;
VTR [2] = 8.8;
cout << vtr[2] << '\n';
Utgangen er 8.8.
Vectorname.på (i)
“Vectorname.på (i) "er som" Vectorname [i] ", men" Vectorname.på (i) ”er mer pålitelig. Følgende kode viser hvordan denne vektoren skal brukes:
vektorVTR 1.1, 2.2, 3.3, 4.4;
FLOAT FL = VTR.på (2);
cout << fl << '\n';
at () er en vektormedlemsfunksjon.
Vectorname.på (i) const
“Vectorname.på (i) const ”er som“ Vectorname [i] const ”, men“ Vectorname.på (i) const ”er mer pålitelig. “Vectorname.ved (i) const "utføres i stedet for“ Vectorname.ved (i) ”når vektoren er en konstant vektor. Denne vektoren brukes i følgende kode:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
FLOAT FL = VTR.på (2);
cout << fl << '\n';
at () const er en vektormedlemsfunksjon.
Tilordne en verdi med at () -funksjonen
En verdi kan tilordnes en ikke-konstant vektor med AT () -funksjonen, som følger:
vektorVTR 1.1, 2.2, 3.3, 4.4;
VTR.på (2) = 8.8;
cout << vtr[2] << '\n';
Utgangen er 8.8.
Problem med delskrifing
Problemet med delskrifing (indeksering) er at hvis indeksen er utenfor rekkevidde, kan null returneres eller en feil kan utstedes ved kjøretid.
front()
Dette returnerer en referanse til det første elementet i vektoren uten å fjerne elementet. Utgangen til følgende kode er 1.1.
vektorVTR 1.1, 2.2, 3.3, 4.4;
FLOAT FL = VTR.front();
cout << fl << '\n';
Elementet fjernes ikke fra vektoren.
front () const
Når vektorkonstruksjonen er gitt av Const, blir uttrykket “front () const” utført i stedet for “foran ().”Dette brukes i følgende kode:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
FLOAT FL = VTR.front();
cout << fl << '\n';
En konstant referanse returneres. Elementet fjernes ikke fra vektoren.
tilbake()
Dette returnerer en referanse til det siste elementet i vektoren uten å fjerne elementet. Utgangen til følgende kode er 4.4.
vektorVTR 1.1, 2.2, 3.3, 4.4;
FLOAT FL = VTR.tilbake();
cout << fl << '\n';
Tilbake () const
Når vektorkonstruksjonen er gitt av Const, utføres uttrykket “back () const” i stedet for “Back ().”Dette brukes i følgende kode:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
FLOAT FL = VTR.tilbake();
cout << fl << '\n';
En konstant referanse returneres. Elementet fjernes ikke fra vektoren.
Vektortatatilgang
Data () NOExcept; data () const noExcept;
En av disse returnerer en peker slik at [data (), data () + størrelse ()) er et gyldig område.
Dette vil bli dekket nærmere senere i artikkelen.
Returnerer iteratorer og vektoren
En iterator er som en peker, men har mer funksjonalitet enn en peker.
Begynn () NOEXCEPT
Returnerer en iterator som peker på det første elementet i vektoren, som i følgende kodesegment:
vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: iterator iter = VTR.begynne();
cout << *iter << '\n';
Utgangen er 1.1. Merk at erklæringen som mottar iteratoren er erklært. Iteratoren er derferert i et returuttrykk for å oppnå verdien på samme måte som en peker blir derferert.
Begynn () const noExcept;
Returnerer en iterator som peker på det første elementet i vektoren. Når vektorkonstruksjonen er gitt av Const, utføres uttrykket “begynn () const” i stedet for “Begynn ().”Under denne tilstanden kan det tilsvarende elementet i vektoren ikke endres. Dette brukes i følgende kode:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: const_iterator iter = vtr.begynne();
cout << *iter << '\n';
Utgangen er 1.1. Merk at "const_iterator" har blitt brukt denne gangen i stedet for bare "iterator" for å motta den returnerte iteratoren.
slutt () NOEXCEPT
Returnerer en iterator som peker rett utover det siste elementet i vektoren. Tenk på følgende kodesegment:
vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: iterator iter = VTR.slutt();
cout << *iter << '\n';
Utgangen er 0, som er meningsløs, ettersom det ikke er noe konkret element utover det siste elementet.
slutt () const nowexcept
Returnerer en iterator som peker rett utover det siste elementet i vektoren. Når vektorkonstruksjonen er forut for "const", blir uttrykket "end () const" utført i stedet for "ende ().”Tenk på følgende kodesegment:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: const_iterator iter = vtr.slutt();
cout << *iter << '\n';
Utgangen er 0. Merk at "const_iterator" har blitt brukt denne gangen i stedet for bare "iterator" for å motta den returnerte iteratoren.
Omvendt iterasjon
Det er mulig å ha en iterator som itererer fra slutten til rett før det første elementet.
rbegin () NoExcept
Returnerer en iterator som peker på det siste elementet i vektoren, som i følgende kodesegment:
vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: Reverse_Iterator Riter = VTR.rbegin ();
cout << *rIter << '\n';
Utgangen er 4.4.
Merk at erklæringen som mottar den motsatte iteratoren er erklært. Iteratoren er derferert i et returuttrykk for å oppnå verdien på samme måte som en peker blir derferert.
rbegin () const noExcept;
Returnerer en iterator som peker på det siste elementet i vektoren. Når vektorkonstruksjonen er gitt av “const”, blir uttrykket “rbegin () const” utført i stedet for “rbegin ().”Under denne tilstanden kan det tilsvarende elementet i vektoren ikke endres. Denne funksjonen brukes i følgende kode:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: const_reverse_iterator riter = VTR.rbegin ();
cout << *rIter << '\n';
Utgangen er 4.4.
Merk at Const_reverse_iterator har blitt brukt denne gangen, i stedet for bare reverse_iterator, for å motta den returnerte iteratoren.
Rend () NoExcept
Returnerer en iterator som peker rett før det første elementet i vektoren. Tenk på følgende kodesegment:
vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: Reverse_Iterator Riter = VTR.Rend ();
cout << *rIter << '\n';
Utgangen er 0, som er meningsløs, da det ikke er noe konkret element rett før det første elementet.
Rend () Const NoExcept
Returnerer en iterator som peker rett før det første elementet i vektoren. Når vektorkonstruksjonen er gitt av "const", blir uttrykket “rend () const” utført i stedet for “Rend ().”Tenk på følgende kodesegment:
const vektorVTR 1.1, 2.2, 3.3, 4.4;
vektor:: const_reverse_iterator riter = VTR.Rend ();
cout << *rIter << '\n';
Utgangen er 0.
Merk at Const_reverse_iterator har blitt brukt denne gangen, i stedet for bare reverse_iterator, for å motta den returnerte iteratoren.
Vektormodifiserere
En modifiserer som endrer vektoren kan ta eller returnere en iterator.
en.Emplace (P, Args)
Setter inn et objekt av type T konstruert med std :: fremover (args) ... før P.
For detaljer - se senere
Sett inn (iteratorposisjon, verdi)
Setter inn en kopi av verdien på vektorens iteratorposisjon. Returnerer iteratoren (posisjonen) i vektoren der kopien er plassert. Følgende kode viser hvor verdien er plassert:
vektorVTR 10, 20, 30, 40;
vektor:: iterator iter = VTR.begynne();
++iter;
++iter;
VTR.Sett inn (iter, 25);
cout << vtr[1] << " << vtr[2]<< '
' << vtr[3] << '\n';
Utgangen er: 20 25 30.
Merk at iteratoren var avansert (økt) akkurat som en peker.
En initialiseringsliste kan også settes inn, som følgende kode illustrerer:
vektorVTR 10, 20, 30, 40;
vektor:: iterator iter = VTR.begynne();
++iter;
++iter;
VTR.Sett inn (iter, 25, 28);
cout << vtr[1] << " << vtr[2]<< '
' << vtr[3]<< " << vtr[4] << '\n';
Utgangen er: 20 25 28 30.
Slett (posisjon)
Fjerner et element i stillingen som iteratoren peker på, og returnerer deretter iteratorposisjonen. Følgende kode illustrerer dette:
vektorVTR 10, 20, 30, 40;
vektor:: iterator iter = VTR.begynne();
++iter;
++iter;
VTR.slette (iter);
cout << vtr[0] << " << vtr[1] << '
' << vtr[2]<< '\n';
Utgangen er: 10 20 40
push_back (t), push_back (RV)
Brukes til å legge til et enkelt element på slutten av vektoren. Bruk push_back (t) som følger:
vektorVTR 1.1, 2.2, 3.3, 4.4;
VTR.Push_back (5.5);
float fl = vtr [4];
cout << fl << '\n';
Utgangen er 5.5.
Push_back (RV): - Se senere.
pop_back ()
Fjerner det siste elementet uten å returnere det. Størrelsen på vektoren reduseres med 1. Følgende kode illustrerer dette:
vektorVTR 1.1, 2.2, 3.3, 4.4;
VTR.pop_back ();
Float Sz = VTR.størrelse();
cout << sz << '\n';
Utgangen er 3.
en.Swap (b)
To vektorer kan byttes, som illustrert i følgende kodesegment:
vektorVTR1 1.1, 2.2, 3.3, 4.4;
vektorVTR2 10, 20;
VTR1.SWAP (VTR2);
cout << "vtr1: "<< vtr1[0] <<" "<< vtr1[1] <<"
""<< vtr1[2] <<" "<< vtr1[3] << '\n';
cout << "vtr2: "<< vtr2[0] <<" "<< vtr2[1] <<"
""<< vtr2[2] <<" "<< vtr2[3] << '\n';
Utgangen er:
VTR1: 10 20 0 0
VTR2: 1.1 2.2 3.3 4.4
Merk at lengden på en vektor økes om nødvendig. Verdier som ikke hadde erstatning, erstattes av noen standardverdi.
klar()
Fjerner alle elementer fra vektoren, som følgende kodesegment illustrerer:
vektorVTR 1.1, 2.2, 3.3, 4.4;
VTR.klar();
cout << vtr.size() << '\n';
Utgangen er 0.
Likestilling og relasjonelle operatører for vektorer
== operatøren
Returnerer 1 for sann hvis de to vektorene har samme størrelse og de tilsvarende elementene er like; Ellers returnerer det 0 for falsk. For eksempel:
vektorU 1, 2, 3;
vektorV 4, 5, 6;
bool bl = u == v;
cout << bl << '\n';
Utgangen er 0.
De != Operatør
Returnerer 1 for sann hvis de to vektorene ikke har samme størrelse og/eller de tilsvarende elementene ikke er like; Ellers returnerer det 0 for falsk. For eksempel:
vektorU 1, 2, 3;
vektorV 4, 5, 6;
bool bl = u!= V;
cout << bl << '\n';
Utgangen er 1.
De < Operator
Returnerer 1 for sann hvis den første vektoren er den første delmengden av den andre vektoren, med elementene i de to like store delene som er den samme og i samme rekkefølge. Hvis begge vektorene har samme størrelse og beveger seg fra venstre til høyre og et element oppstår i den første vektoren som er mindre enn det tilsvarende elementet i den andre vektoren, vil 1 fortsatt bli returnert. Ellers returneres 0 for falsk. For eksempel:
vektorU 3, 1, 1;
vektorV 3, 2, 1;
bool bl = ucout << bl << '\n';
Utgangen er 1. < does not include the case when the size and order are the same.
> Operatøren
Returnerer !(U < V), where U is the first vector and V is the second vector, according to the above definitions.
De <= Operator
Returnerer u <= V, where U is the first vector and V is the second vector, according to the above definitions.
> = Operatøren
Returnerer !(U <= V), where U is the first vector and V is the second vector, according to the above definitions.
Konklusjon
En vektor er et eksempel på en sekvensbeholder. En vektor er en "bedre" form for den ordinære matrisen og blir instantiert fra en klasse. Vektorer har metoder som er klassifisert under: konstruksjon og tildeling, kapasitet, elementtilgang, datatilgang, iteratorer, modifikatorer og numeriske overbelastede operatører.
Det er andre sekvensbeholdere, kalt liste, fremover_list og matrise. Hvis oppgaven innebærer hyppige innsettinger og slettinger midt i sekvensen, bør en liste eller fremover_liste brukes. Hvis oppgaven innebærer hyppige innsettinger og slettinger i begynnelsen eller slutten av sekvensen, bør en deque brukes. Og så bør vektorer bare brukes når denne typen operasjoner ikke er viktige.