vectors stl
Paper dels vectors a STL amb exemples.
Fins ara, en aquesta sèrie C ++, hem vist matrius estàtics que tenen una mida fixa.
Si a la meitat del programa hem d’emmagatzemar més elements a la matriu, es fa impossible i estem segurs d’obtenir una excepció ‘out_of_bound’, en el moment que intentem emmagatzemar elements més enllà dels límits de la matriu.
Una solució per a això és que la matriu sigui declarada amb la capacitat màxima, de manera que no trobarem cap problema en emmagatzemar més elements en temps d'execució. Però aquest acord té un greu desavantatge, ja que estem malgastant massa memòria.
=> Consulteu aquí la sèrie completa de formació C ++.
La resposta a tots aquests problemes és utilitzar una matriu dinàmica que s’ampliarà per si mateixa a mesura que sorgeixi la necessitat. STL proporciona aquesta matriu dinàmica en forma de contenidor vectorial.
Què aprendreu:
- Com definim els vectors?
- Declaració d'un vector en C ++ amb std :: Vector Class
- Inicialitzar Vector
- Vector iterador
- Funcions vectorials
- Capacitat vectorial
- Modificadors de vectors
- Vector 2D
- Exemple vectorial
- Conclusió
- Lectura recomanada
Com definim els vectors?
Els vectors són contenidors de matriu dinàmica que el canvien de mida automàticament quan s’insereixen o se suprimeixen elements. L’emmagatzematge de vectors es fa mitjançant el mateix contenidor de vectors.
Els elements del vector s’emmagatzemen en ubicacions contigües. Igual que les matrius, els elements vectorials també es poden recórrer i accedir mitjançant iteradors.
Declaració d'un vector en C ++ amb std :: Vector Class
A la classe de vectors STL ‘ std :: vector ’Es defineix a la capçalera. Per tant, per tal d’utilitzar un contenidor vectorial, hauríem d’incloure aquesta capçalera al nostre programa com es mostra a continuació:
#include
Podem declarar un vector buit com es mostra a continuació:
std::vector myvec;
La línia de codi anterior crearà un vector amb els elements del tipus enter. En memòria, es presentarà com myvec.
Inicialitzar Vector
Podem inicialitzar un vector amb valor en el moment de declarar-lo.
no es pot connectar a la passarel·la predeterminada
Això es fa de la següent manera:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
Al codi anterior, declarem un vector de tipus int anomenat myvec que conté els primers cinc elements de la seqüència de Fibonacci.
La disposició de la memòria d’aquest vector serà la següent:
Vector iterador
Com ja s'ha esmentat, utilitzem iteradors per recórrer el vector de manera seqüencial.
Els vectors admeten les funcions iteradores següents per recórrer els elements:
- begin () - Retorna l'iterador assenyalat al primer element del contenidor vectorial.
- final() - Retorna un iterador que apunta a l'element que segueix a l'últim element del vector.
- rbegin () - Retorna un iterador invers que apunta a l'últim element del contenidor vectorial.
- render () - Retorna un iterador invers que apunta al primer element del contenidor vectorial.
- cbegin () - Retorna un iterador constant que apunta al primer element del contenidor vectorial.
- uns quants() - Retorna un iterador constant que apunta a l'element següent a l'últim element del contenidor vectorial.
- crbegin () - Retorna un iterador de constant inversa que apunta a l'últim element del contenidor vectorial.
- crend () - Retorna un iterador de constant inversa que apunta al primer element del contenidor vectorial.
Vegem un exemple que demostri aquestes funcions iteradores.Les altres funcions es poden utilitzar de manera similar.
#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; }
Sortida:
Sortida del vector amb inici i finalització: 2 3 4 5 6
Sortida de Vector amb rbegin i rend: 6 5 4 3 2
Vector de sortida de amb cbegin i cend: 2 3 4 5 6
Vector de sortida de amb crbegin i crend: 6 5 4 3 2
Així, en aquest codi, declarem un vector i hi inserim valors mitjançant la funció push_back. A continuació, mostrem els vectors mitjançant cadascuna de les funcions iteradores que hem descrit anteriorment. Com es veu a la sortida en funció de les funcions d'iterador utilitzades, canvia l'ordre en què es mostra el vector.
Funcions vectorials
Ordenant un vector
Podem utilitzar algorismes STL que ja hem vist al vector.
A continuació es mostra l'exemple d'utilitzar 'Ordena' al vector.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Sortida:
Vector original
10 50 30 20 60 40
Vector ordenat
10 20 30 40 50 60
A l'exemple anterior, hem inicialitzat un vector i després hem aplicat un algorisme d'ordenació per ordenar el vector.
Elements d'impressió d'un vector
Els vectors es poden imprimir mitjançant un iterador i un flux 'cout'. Podem utilitzar un iterador per recórrer cadascun dels elements vectorials i imprimir-los amb cout.
L'exemple següent ho mostra:
#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 << ' '; }
Sortida:
Sortida del vector amb inici i finalització: 3 4 5 6 7
Capacitat vectorial
Hi ha diverses funcions que actuen sobre els vectors per determinar-ne la mida, la mida màxima, etc.
Enumerem les funcions de la següent manera:
(i) Mida del vector
La funció size () retorna el nombre d'elements del contenidor vectorial. Aquesta és la funció integrada de la classe std :: vector i es pot utilitzar directament per trobar la mida del vector.
soapui preguntes i respostes d’entrevistes per a persones experimentades
Vegem un exemple de vector que utilitza la funció size ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Sortida:
Mida del vector: 6
En el programa anterior, hem definit un vector myvec que consta de sis elements. A continuació, anomenem la funció size () a myvec i mostra la mida correcta.
(ii) Canviar la mida d'un vector
També podem canviar la mida d’un vector a la mida desitjada de manera que pugui contenir el nombre ‘n’ d’elements. Això s’aconsegueix mitjançant la funció ‘resize ()’ de la classe std :: vector. La funció de canvi de mida pren la mida del vector com a paràmetre i, a continuació, canvia la mida del contenidor del vector a la mida especificada.
Entenguem això amb l'ajut d'un exemple.
#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; }
Sortida:
Els elements vectorials són: 1 1 2 3 5 8
Mida del vector després de canviar la mida: 4
Els elements vectorials després de canviar la mida són: 1 1 2 3
Al programa anterior, inicialment definim un vector myvec de mida 6. A continuació, anomenem la funció de canvi de mida d’aquest vector amb mida = 4. Això vol dir que ara volem canviar la mida del nostre vector a la mida 4.
Després de trucar a la funció de canvi de mida, tornem a imprimir el vector. Veiem que quan redimensionem el vector a la mida 4, es descarten els elements restants i només es mostren els 4 elements del vector.
A part de les funcions de mida i de mida, la classe vectorial també admet algunes funcions més que ens permeten manipular la capacitat del vector. Ells són:
- max_size (): Retorna la mida màxima, és a dir, el nombre màxim d'elements que pot contenir el vector.
- capacitat (): Retorna la mida de l'espai d'emmagatzematge assignat actualment. Es retorna en funció del nombre d'elements.
- buit(): Comprova si el contenidor està buit.
- shrink_to_fit (): Redueix la capacitat del vector per adaptar-se a la mida i descarta la resta d’elements.
- reserve (): Reserva la capacitat vectorial per contenir n elements.
Modificadors de vectors
Els modificadors són operacions o funcions que es poden utilitzar per modificar el contingut del contenidor vectorial. Veurem algunes de les funcions principals que s’utilitzen com a modificadors.
Assignació de nous valors a Vector
Una de les funcions modificadores que proporciona std :: vector és la funció assigna. La funció Assign assigna nous valors al vector substituint els antics.
Això es demostra a l'exemple següent.
#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) << ' '; }
Sortida:
Els elements vectorials: 10 10 10 10 10
Al codi anterior, declarem un vector de tipus int. Llavors cridem per assignar una funció amb els paràmetres 5, 10. Això vol dir que pretenem assignar l’element 10 al vector 5 vegades. Quan mostrem el vector, veiem que el vector té 5 elements, tots amb el valor 5.
Esborrant un vector
La següent funció que proporciona std :: vector per modificar un vector és la funció ‘esborrar’. La funció Esborra elimina els elements del rang especificat o una posició del vector.
Vegem un exemple de la funció Esborra.
#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: '< Sortida:
Elements vectorials: 1 1 2 3 5
Mida del vector després de l’esborrat: 4
Vector després de l’operació d’esborrat: 1 2 3 5
Com es mostra a la sortida anterior per a la funció de canvi de mida, especifiquem l'abast o la posició de l'element que es vol esborrar o eliminar. A l'exemple anterior, hem especificat la posició que apunta al primer element del vector.
Inseriu elements al vector
La classe vectorial std :: vector proporciona una altra funció per inserir valors al vector. La funció Insereix ens permet inserir elements al vector abans de la posició especificada.
Això quedarà clar amb l'exemple següent.
#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) << ' '; }
Sortida:
Vector inicial: 2 3 4
Nou vector després de la inserció: 20 30 2 3 4
El programa anterior declara inicialment un vector amb 3 elements. A continuació, anomenem dues vegades la funció d'inserció per inserir els valors 20 i 30 a la primera i segona posició del vector respectivament. A continuació, mostrem el vector canviat.
Intercanvi de contingut vectorial
La classe de vectors també ens proporciona la possibilitat d’intercanviar o intercanviar contingut d’un vector amb el d’un altre vector del mateix tipus i mida. Això s’aconsegueix mitjançant la funció ‘swap’ incorporada al vector.
Penseu en el següent fragment de codi.
#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) << ' '; }
Sortida:
Vector 1: 1 3
Vector 2: 5 7
Després d’intercanviar
Vector 1: 5 7
Vector 2: 1 3
El codi anterior mostra el contingut de dos vectors abans i després d’intercanviar.
Esborra els valors del vector
A diferència d’eliminar un o més elements del vector mitjançant la funció d’esborrar, tenim una altra funció ‘Esborra’ que ens permet eliminar tots els elements del contenidor de vectors.
Al programa següent, demostrem una funció clara del contenidor vectorial.
#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: '< Sortida:
Mida del vector v1: 4
Vector 1: 1 3 5 7
Mida del vector v1 després de la trucada a clearfunction: 0
Aquí primer declarem un vector i després hi introduïm elements. Una vegada que anomenem la funció clear (), veiem que tots els elements del vector s’eliminen alhora.
a (pos)
Aquesta funció retorna la referència a l’element a la posició ‘pos’ dins del vector.
Aquesta és una de les funcions que s’utilitzen per accedir a l’element vectorial.
A continuació es dóna un exemple:
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Sortida:
Element a la posició 3: 3
Com es mostra a l’exemple, la funció ‘at’ s’utilitza per accedir a l’element del vector a la posició especificada.
Davant
La funció 'frontal' retorna la referència al primer element del vector. Aquesta és una altra funció que fem servir per accedir als elements del contenidor vectorial.
L'exemple següent mostra l'ús de la funció 'frontal'.
#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 Sortida:
Vector d'entrada: 1 1 2 3 5 8
Element a la part frontal del vector: 1
esquena
De manera similar a la funció ‘frontal’, la funció posterior s’utilitza per accedir a l’últim element del contenidor vectorial. La funció 'enrere' retorna una referència a l'últim element del contenidor vectorial.
L'exemple següent mostra l'ús de la funció 'enrere'.
#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 Sortida:
Vector d'entrada: 1 1 2 3 5 8
Element a la part posterior del vector: 8
Trobeu un element al vector
La funció 'trobar' s'utilitza per trobar si hi ha un element concret (conegut com a clau) al vector o no. Aquesta funció se suposa que és ràpida i eficient. Un cop es troba el valor, torna la funció.
L'exemple següent mostra l'ús de la funció de cerca.
#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'; }
Sortida:
Vector d'entrada: 1 1 2 3 5 8
Introduïu la clau a cercar: 0
No s'ha trobat l'element
alternatives gratuïtes a Avast Cleanup Premium
Vector 2D
El vector bidimensional també es coneix com a ‘vector de vector’. Igual que les matrius bidimensionals, els elements de vectors bidimensionals també es disposen en forma matricial.
A continuació es mostra un exemple de programa per al vector 2D.
#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< Sortida:
Vector 2D:
Gener 3 5
7 9 11
13 15 17
A l'exemple anterior, observeu la forma en què es defineix el vector 2D. Es defineix com un vector dins d’un altre vector. Mentre mostrem aquest vector 2D, fem servir el mateix enfocament que el de mostrar matrius 2D.
Exemple vectorial
A continuació es mostra un exemple vectorial que conté la majoria de les operacions vectorials.
#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: '< Sortida:
Els elements vectorials: 10 10 10 10 10
El nou vector després de push_back: 10 10 10 10 10 5
Nou vector després de pop_back: 10 10 10 10 10
Nou vector després de la inserció: 20 10 10 10 10 10
Mida del vector després de l’esborrat: 5
Després d'esborrar el primer element: 10 10 10 10 10
A continuació es mostra la captura de pantalla del mateix.

A l'exemple anterior, declarem un vector i, a continuació, utilitzant les funcions assign i push_back, introduïm elements al vector. A continuació, fem servir la funció pop_back per eliminar un element del final del vector. Després d'això, tornem a afegir un element al vector mitjançant l'element d'inserció i després esborrem l'element mitjançant la funció d'esborrar.
Aquest és un exemple de extrem a extrem del contenidor vectorial que demostra les seves diverses funcions.
Conclusió
Amb això, hem arribat al final d’aquest tutorial sobre el vector.
Al nostre proper tutorial, coneixerem el contenidor de 'llista' de STL, que és similar a les línies de matrius i vectors.
=> Consulteu aquí la guia d’entrenament perfecta de C ++.
Lectura recomanada