vectors stl
Rollen av vektorer i STL med exempel.
Hittills har vi i denna C ++ - serie sett statiska matriser som har en fast storlek.
Om vi i mitten av programmet måste lagra fler element i matrisen blir det omöjligt och vi är säker på att få undantag för 'out_of_bound', det ögonblick vi försöker lagra element utanför arraygränserna.
En lösning för detta är att matrisen deklareras med maximal kapacitet så att vi inte hittar något problem att lagra fler element vid körning. Men detta arrangemang har en allvarlig nackdel genom att vi slösar för mycket minne.
=> Kolla hela C ++ träningsserien här.
Svaret på alla dessa frågor är att använda en dynamisk matris som kommer att expandera på egen hand när behovet uppstår. STL tillhandahåller denna dynamiska matris i form av en vektorbehållare.
Vad du kommer att lära dig:
- Hur definierar vi vektorer?
- Förklara en vektor i C ++ med std :: Vektorklass
- Initiera vektor
- Vector Iterator
- Vektorfunktioner
- Vektorkapacitet
- Vector modifierare
- 2D-vektor
- Vector Exempel
- Slutsats
- Rekommenderad läsning
Hur definierar vi vektorer?
Vektorer är dynamiska matrisbehållare som automatiskt ändrar storlek när element sätts in eller tas bort. Lagring av vektor hanteras av själva vektorbehållaren.
Elementen i vektorn lagras på angränsande platser. Precis som matriser kan vektorelement också korsas och nås med iteratorer.
Förklara en vektor i C ++ med std :: Vektorklass
I STL-vektorklass ' std :: vektor ”Definieras under rubriken. Således, för att kunna använda en vektorbehållare, bör vi inkludera denna rubrik i vårt program som visas nedan:
#include
Vi kan deklarera en tom vektor enligt nedan:
std::vector myvec;
Ovanstående kodrad skapar en vektor med elementen av typen heltal. Till minne kommer detta att läggas ut som myvec.
Initiera vektor
Vi kan initialisera en vektor med värde när vi deklarerar den.
bästa stället att titta på gratis anime
Detta görs enligt följande:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
I ovanstående kod förklarar vi en vektor av typen int med namnet myvec som innehåller de fem första elementen i Fibonacci-sekvensen.
Minneslayouten för denna vektor kommer att vara som nedan:
Vector Iterator
Som redan nämnts använder vi iteratorer för att gå igenom vektorn sekventiellt.
Vektorer stöder följande iteratorfunktioner för att gå igenom elementen:
- Börja() - Returnerar iterator pekade på det första elementet i vektorbehållaren.
- slutet() - Returnerar en iterator som pekar på elementet som följer det sista elementet i vektorn.
- rbegin () - Returnerar en omvänd iterator som pekar på det sista elementet i vektorbehållaren.
- framställa () - Returnerar en omvänd iterator som pekar på det första elementet i vektorbehållaren.
- cbegin () - Returnerar en konstant iterator som pekar på det första elementet i vektorbehållaren.
- några() - Returnerar en konstant iterator som pekar på elementet som följer det sista elementet i vektorbehållaren.
- crbegin () - Returnerar en omvänd konstant iterator som pekar på det sista elementet i vektorbehållaren.
- crend () - Returnerar en omvänd konstant iterator som pekar på det första elementet i vektorbehållaren.
Låt oss se ett exempel som skulle visa dessa iteratorfunktioner.De andra funktionerna kan användas på samma sätt.
#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 of Vector med början och slut: 2 3 4 5 6
Output of Vector med rbegin och rend: 6 5 4 3 2
Outputvektor av med cbegin och cend: 2 3 4 5 6
Outputvektor av med crbegin och crend: 6 5 4 3 2
Således i den här koden deklarerar vi en vektor och infogar värden i den med funktionen push_back. Sedan visar vi vektorerna med var och en av iteratorfunktionerna som vi beskrivit ovan. Som du ser från utgången, beroende på de iteratorfunktioner som används, ändras ordningen i vilken vektorn visas.
Vektorfunktioner
Sortera en vektor
Vi kan använda STL-algoritmer som vi redan har sett på vektorn.
Nedan följer exemplet med att använda 'Sortera' på vektorn.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Produktion:
Originalvektor
10 50 30 20 60 40
Sorterad vektor
10 20 30 40 50 60
I exemplet ovan har vi initierat en vektor och sedan använt en sorteringsalgoritm för att sortera vektorn.
Utskriftselement Av En Vektor
Vektorer kan skrivas ut med en iterator- och 'cout' -ström. Vi kan använda en iterator för att gå igenom vart och ett av vektorelementen och skriva ut dem med cout.
Följande exempel visar detta:
#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 of Vector med början och slut: 3 4 5 6 7
Vektorkapacitet
Det finns olika funktioner som verkar på vektorer för att bestämma dess storlek, maximala storlek etc.
Vi listar funktionerna enligt nedan:
(i) Storleken på vektorn
Funktionsstorleken () returnerar antalet element i vektorbehållaren. Detta är den inbyggda funktionen för std :: vektorklass och kan användas direkt för att hitta storleken på vektorn.
intervjufrågor och svar på nätutvecklare
Låt oss se ett exempel på en vektor med funktionen storlek ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Produktion:
Vektorstorlek: 6
I ovanstående program har vi definierat en vektor myvec bestående av sex element. Därefter kallar vi funktionen storlek () på myvec och den visar rätt storlek.
(ii) Ändra storlek på en vektor
Vi kan också ändra storlek på en vektor till önskad storlek så att den kan innehålla ett antal element. Detta uppnås genom att 'ändra storlek ()' funktion av std :: vektorklass. Ändringsfunktionen tar storleken på vektorn som parameter och ändrar sedan vektorbehållaren till den angivna storleken.
Låt oss förstå detta med hjälp av ett exempel.
#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:
Vektorelement är: 1 1 2 3 5 8
Vektorstorlek efter storlek: 4
Vektorelement efter storleksändring är: 1 1 2 3
I ovanstående program definierar vi initialt en vektormyvec av storlek 6. Sedan kallar vi resize-funktionen på den här vektorn med storlek = 4. Det betyder att vi vill ändra storlek på vår vektor till storlek 4 nu.
Efter att ha anropat resize-funktionen skriver vi ut vektorn igen. Vi ser att när vi ändrar storleken på vektorn till storlek 4 kasseras de återstående elementen och endast de fyra elementen i vektorn visas.
Bortsett från funktioner för storlek och storlek, stöder vektorklass också några fler funktioner som gör att vi kan manipulera vektorn. Dom är:
- max_size (): Returnerar maximal storlek, dvs. det maximala antalet element som vektorn kan innehålla.
- kapacitet(): Returnerar storleken på lagringsutrymmet som för närvarande tilldelats. Detta returneras i termer av antalet element.
- tömma(): Kontrollerar om behållaren är tom.
- krymp för att passa(): Krymper vektorkapaciteten så att den passar storleken och kasserar alla andra element.
- boka(): Reserverar vektorkapaciteten så att den innehåller n element.
Vector modifierare
Modifierare är operationer eller funktioner som kan användas för att modifiera innehållet i vektorbehållaren. Vi kommer att se några av de viktigaste funktionerna som används som modifierare.
Tilldela nya värden till vektorn
En av modifieringsfunktionerna som tillhandahålls av std :: vector är tilldelningsfunktionen. Tilldelningsfunktionen tilldelar vektorn nya värden genom att ersätta de gamla.
Detta visas i följande exempel.
#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:
Vektorelementen: 10 10 10 10 10
I ovanstående kod förklarar vi en vektor av typen int. Sedan ringer vi för att tilldela en funktion med parametrarna 5, 10. Det betyder att vi tänker tilldela element 10 till vektorn 5 gånger. När vi visar vektorn ser vi att vektorn har 5 element, alla med värde 5.
Radera en vektor
Nästa funktion som tillhandahålls av std :: vector för att modifiera en vektor är funktionen 'radera'. Radera-funktionen tar bort elementen från det angivna intervallet eller en position från vektorn.
Låt oss se ett exempel på funktionen Radera.
#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:
Vektorelement: 1 1 2 3 5
Vektorstorlek efter radering: 4
Vektor efter radering: 1 2 3 5
Som visas i ovanstående utgång för att ändra storlek på funktionen anger vi intervallet eller positionen för det element som ska raderas eller tas bort. I exemplet ovan har vi specificerat positionen som pekar på det första elementet i vektorn.
Infoga element i vektorn
Vektorklassen std :: vektorn ger ytterligare en funktion för att infoga värden i vektorn. Infoga-funktionen låter oss infoga element i vektorn före den angivna positionen.
Detta kommer att framgå med följande exempel.
#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:
Ursprunglig vektor: 2 3 4
Ny vektor efter infogning: 20 30 2 3 4
Ovanstående program förklarar initialt en vektor med 3 element. Sedan kallar vi insättningsfunktionen två gånger för att infoga värdena 20 och 30 vid första respektive andra position i vektorn. Sedan visar vi den ändrade vektorn.
Byta vektorinnehåll
Vektorklassen ger oss också möjligheten att byta eller utbyta innehållet i en vektor med en annan vektor av samma typ och storlek. Detta uppnås med vektorn inbyggd funktion 'swap'.
Tänk på följande kod.
#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 byte
Vektor 1: 5 7
Vektor 2: 1 3
Ovanstående kod visar innehållet i två vektorer före och efter byte.
Rensa värden i vektorn
Till skillnad från att ta bort ett eller flera element från vektorn med hjälp av raderingsfunktionen, har vi en annan funktion ”Rensa” som gör att vi kan ta bort alla element i vektorbehållaren.
I programmet nedan visar vi en tydlig funktion av vektorbehållaren.
#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:
Storlek på vektor v1: 4
Vektor 1: 1 3 5 7
Storlek på vektor v1 efter samtal för att rensa funktion: 0
Här deklarerar vi först en vektor och trycker sedan in element i den. När vi väl kallat funktionen clear () ser vi att alla element i vektorn tas bort på en gång.
vid (pos)
Denna funktion returnerar referensen till elementet vid position 'pos' i vektorn.
Detta är en av funktionerna som används för att komma åt vektorelementet.
Ett exempel ges nedan:
tvål och resten webbtjänstintervjuer
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Produktion:
Element vid position 3: 3
Som visas i exemplet används 'at' -funktionen för att komma åt elementet i vektorn vid den angivna positionen.
Främre
Funktionen 'front' returnerar referensen till det första elementet i vektorn. Detta är ännu en funktion som vi använder för att komma åt elementen i vektorbehållaren.
Följande exempel visar användningen av 'front' -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:
Ingångsvektor: 1 1 2 3 5 8
Element längst fram på vektorn: 1
Tillbaka
På samma sätt som 'front' -funktionen används bakfunktionen för att komma åt det sista elementet i vektorbehållaren. Funktionen ”tillbaka” returnerar en referens till det sista elementet i vektorbehållaren.
Följande exempel visar användningen av ”bakåt” -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:
Ingångsvektor: 1 1 2 3 5 8
Element på baksidan av vektorn: 8
Hitta ett element i vektorn
Funktionen 'hitta' används för att hitta om ett visst element (kallat nyckel) finns i vektorn eller inte. Denna funktion ska vara snabb och effektiv. När värdet hittats återgår funktionen.
Följande exempel visar användningen av sökfunktionen.
#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:
Ingångsvektor: 1 1 2 3 5 8
Ange nyckeln som ska sökas: 0
Element hittades inte
2D-vektor
Tvådimensionell vektor kallas också 'Vector of Vector'. Precis som tvådimensionella matriser är element i tvådimensionella vektorer också ordnade i matrisformen.
Ett exempel på ett program för 2D-vektor ges nedan.
#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
Notera i exemplet ovan hur 2D-vektorn definieras. Det definieras som en vektor inuti en annan vektor. När vi visar denna 2D-vektor använder vi samma tillvägagångssätt som att visa 2D-matriser.
Vector Exempel
Nedan följer ett vektorexempel som innehåller de flesta vektoroperationerna.
#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:
Vektorelementen: 10 10 10 10 10
Den nya vektorn efter push_back: 10 10 10 10 10 5
Ny vektor efter pop_back: 10 10 10 10 10
Ny vektor efter infogning: 20 10 10 10 10 10
Vektorstorlek efter radering: 5
Efter radering av första elementet: 10 10 10 10 10
Följande är skärmdump för samma.

I ovanstående exempel deklarerar vi en vektor och ange sedan element i vektorn med hjälp av tilldelnings- och push_back-funktioner. Sedan använder vi funktionen pop_back för att ta bort ett element från slutet av vektorn. Därefter lägger vi igen ett element till vektorn med hjälp av insättningselementet och raderar sedan elementet med raderingsfunktionen.
Detta är ett slut-till-slut-exempel på vektorbehållaren som visar dess olika funktioner.
Slutsats
Med detta har vi kommit till slutet av denna handledning om vektor.
I vår kommande handledning kommer vi att lära oss om 'list' -behållaren för STL som liknar linjerna med matriser och vektorer.
=> Kolla in den perfekta C ++ träningsguiden här.
Rekommenderad läsning