Vector în C++ Bibliotecă de șabloane standard (STL) cu exemplu
Ce este a C++ Vector?
A C++ Vector este o matrice dinamică capabilă să se redimensioneze automat. Redimensionarea are loc după ce un element a fost adăugat sau șters din vector. Depozitarea este gestionată automat de container. Elementele unui vector sunt stocate în stocare contiguă. Acest lucru permite C++ programatori să acceseze și să traverseze elementele vectoriale folosind iteratoare.
Inserarea de date noi într-un vector se face la sfârșitul acestuia. Acest lucru necesită un timp diferențial. Îndepărtarea unui element dintr-un vector durează timp constant. Motivul este că nu este nevoie să redimensionați vectorul. Inserarea sau ștergerea unui element la începutul vectorului durează timp liniar.
Când să folosiți un vector?
A C++ vectorul trebuie utilizat în următoarele circumstanțe:
- Când aveți de-a face cu elemente de date care se modifică constant.
- Dacă dimensiunea datelor nu este cunoscută înainte de a începe, vectorul nu va cere să setați dimensiunea maximă a containerului.
Cum să inițializați vectorii în C++
Sintaxa vectorilor în C++ este:
vector <data-type> name (items)
- După cum se arată mai sus, începem cu cuvântul cheie vector.
- Tipul de date este tipul de date al elementelor care urmează să fie stocate în vector.
- Numele este numele vectorului sau al elementelor de date.
- Elementele indică numărul de elemente pentru datele vectorului. Acest parametru este opțional.
Iteratori
Scopul iteratorilor este de a ne ajuta să accesăm elementele care sunt stocate într-un vector. Este un obiect care funcționează ca un indicator. Iată iteratoarele comune susținute de C++ vectori:
- vector:: începe(): oferă un iterator care indică primul element al vectorului.
- vector:: end(): oferă un iterator care indică elementul trecut-sfârșitul vectorului.
- vector::cbegin(): este la fel ca vector::begin(), dar nu are capacitatea de a modifica elemente.
- vector::cend(): este la fel ca vector::end() dar nu poate modifica elemente vectoriale.
Modificatorii
Modificatorii sunt utilizați pentru modificarea semnificației tipului de date specificat. Iată modificatorii obișnuiți în C++:
- vector::push_back(): Acest modificator împinge elementele din spate.
- vector::insert(): Pentru inserarea de elemente noi într-un vector într-o locație specificată.
- vector::pop_back(): Acest modificator elimină elementele vectoriale din spate.
- vector::erase(): Este folosit pentru a elimina o serie de elemente din locația specificată.
- vector::clear(): Îndepărtează toate elementele vectoriale.
Exemplu 1
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; for (int a = 1; a <= 5; a++) nums.push_back(a); cout << "Output from begin and end: "; for (auto a = nums.begin(); a != nums.end(); ++a) cout << *a << " "; cout << "\nOutput from cbegin and cend: "; for (auto a = nums.cbegin(); a != nums.cend(); ++a) cout << *a << " "; return 0; }
ieșire:
Iată o captură de ecran a codului:
Explicația codului:
- Includeți fișierul antet iostream în codul nostru. Ne va permite să citim și să scriem pe consolă.
- Includeți fișierul antet vectorial în codul nostru. Ne va permite să lucrăm cu vectori în C++.
- Includeți spațiul de nume std pentru a utiliza clasele și funcțiile sale fără a-l apela.
- Apelați funcția main() în interiorul căreia ar trebui adăugată logica programului.
- { marchează începutul corpului funcției main().
- Declarați un vector numit nums pentru a stoca un set de numere întregi.
- Creați o buclă for pentru a ne ajuta să iterăm peste vector. Variabila ne va ajuta să iterăm peste elementele vectoriale, de la 1st la 5th elemente.
- Împingeți elementele în vectorul num din spate. Pentru fiecare iterație, aceasta va adăuga valoarea curentă a variabilei a în vector, care este de la 1 la 5.
- Imprimați ceva text pe consolă
- Utilizați o variabilă iteratoare a pentru a itera elementele numerelor vectoriale de la început până la elementul trecut-sfârșit. Rețineți că folosim iteratorii vector::begin() și vector::end().
- Imprimați valorile indicate de variabila iterator an pe consolă pentru fiecare iterație.
- Tipăriți ceva text pe consolă. \n este un caracter de linie nouă, deplasând cursorul pe noua linie pentru a imprima de acolo.
- Utilizați o variabilă iterator pentru a itera elementele numerelor vectoriale de la început până la elementul trecut-sfârșit. Rețineți că folosim iteratorii vector::cbegin() și vector::cend().
- Imprimați valorile indicate de variabila iteratoare a pe consolă pentru fiecare iterație.
- Funcția principală ar trebui să returneze o valoare dacă programul rulează cu succes.
- Sfârșitul corpului funcției main().
Exemplu 2
#include <iostream> #include <vector> using namespace std; int main() { vector<int> nums; nums.assign(5, 1); cout << "Vector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.push_back(2); int n = nums.size(); cout << "\nLast element: " << nums[n - 1]; nums.pop_back(); cout << "\nVector contents: "; for (int a = 0; a < nums.size(); a++) cout << nums[a] << " "; nums.insert(nums.begin(), 7); cout << "\nFirst element: " << nums[0]; nums.clear(); cout << "\nSize after clear(): " << nums.size(); }
ieșire:
Iată o captură de ecran a codului:
Explicația codului:
- Includeți fișierul antet iostream în codul nostru pentru a utiliza funcțiile acestuia.
- Includeți fișierul antet vectorial în codul nostru pentru a-l folosi funcții.
- Includeți spațiul de nume std pentru a-și folosi clasele fără a-l apela.
- Apelați funcția main(). Logica programului ar trebui adăugată în corpul său.
- Începutul corpului funcției main().
- Declarați un vector numit nums pentru a stoca niște valori întregi.
- Stocați 5 elemente în numerele vectoriale. Fiecare cu o valoare de 1.
- Imprimați ceva text pe consolă
- Utilizați o variabilă iteratoare a pentru a itera elementele vectorului nums.
- Tipăriți valorile numerelor vectoriale pe consolă pentru fiecare iterație.
- Adăugați valoarea 2 la sfârșitul vectorului nums.
- Declarați o variabilă întreagă n pentru a stoca dimensiunea numerelor vectoriale.
- Tipăriți ultima valoare a numerelor vectoriale alături de alt text. Ar trebui să returneze un 2.
- Eliminați ultimul element din vector nums. Cele 2 vor fi eliminate.
- Imprimați textul pe consolă. \n mută cursorul pe noua linie pentru a imprima textul acolo.
- Utilizați o variabilă iteratoare a pentru a itera elementele vectorului nums.
- Tipăriți valorile numerelor vectoriale pe consolă pentru fiecare iterație.
- Introduceți valoarea 7 la începutul vectorului nums.
- Tipăriți prima valoare a numerelor vectoriale alături de alt text. Ar trebui să revină 7.
- Ștergeți toate elementele din vector nums.
- Tipăriți dimensiunea vectorului num alături de alt text după ștergerea întregului conținut. Ar trebui să returneze 0.
- Sfârșitul corpului funcției main().
Capacitate
Utilizați următoarele funcții pentru a determina capacitatea unui vector:
- Mărimea() -Returnează numărul de elemente dintr-un vector.
- Dimensiune_max.() - Returnează cel mai mare număr de elemente pe care un vector le poate stoca.
- Capacitate () –It returnează cantitatea de spațiu de stocare alocată unui vector.
- Redimensionează () –It redimensionează containerul pentru a conține n articole. Dacă dimensiunea curentă a vectorului este mai mare decât n, elementele din spate vor fi eliminate din vector. Dacă dimensiunea curentă a vectorului este mai mică decât n, elementele suplimentare vor fi adăugate în spatele vectorului.
- Gol () –it returnează adevărat dacă un vector este gol. În caz contrar, se întoarce fals.
Exemplu 3
#include <iostream> #include <vector> using namespace std; int main() { vector<int> vector1; for (int x = 1; x <= 10; x++) vector1.push_back(x); cout << "Vector size: " << vector1.size()<< endl; cout << "Vector capacity: " << vector1.capacity() << endl; cout << "Maximum size of vector: " << vector1.max_size()<< endl; vector1.resize(5); cout << "Vector size after resizing: " << vector1.size() << endl; if (vector1.empty() == false) cout << "Vector is not empty"<<endl; else cout << "Vector is empty"<<endl; return 0; }
ieșire:
Iată o captură de ecran a codului:
Explicația codului:
- Includeți fișierul antet iostream în codul nostru pentru a utiliza funcția acestuia.
- Includeți fișierul antet vectorial în codul nostru pentru a utiliza funcțiile acestuia.
- Includeți spațiul de nume std în codul nostru pentru a-i folosi clasele fără a-l apela.
- Apelați funcția main(). Logica programului ar trebui adăugată în corpul acestei funcții.
- Creați un vector numit vector1 pentru a stoca numere întregi.
- Utilizați o buclă for pentru a crea variabila x cu valori de la 1 la 10.
- Împingeți valorile variabilei x în vector.
- Imprimați dimensiunea vectorului alături de alt text de pe consolă.
- Tipăriți capacitatea vectorului alături de alt text de pe consolă.
- Imprimați numărul maxim de elemente pe care vectorul le poate păstra alături de alt text pe consolă.
- Redimensionați vectorul pentru a conține doar 5 elemente.
- Tipăriți noua dimensiune a vectorului alături de alt text.
- Verificați dacă vectorul nu este gol.
- Tipăriți text pe consolă dacă vectorul nu este gol.
- Utilizați o instrucțiune else pentru a spune ce trebuie făcut dacă vectorul este gol.
- Text de tipărit pe consolă dacă vectorul este gol.
- Programul trebuie să returneze valoare după finalizarea cu succes.
- Sfârșitul corpului funcției main().
Rezumat
- A C++ vector este o matrice dinamică capabilă să se redimensioneze automat atunci când un element este adăugat sau șters din el.
- Depozitarea unui vector este gestionată automat de container.
- Elementele unui vector sunt stocate în stocare contiguă pentru a fi accesate apoi traversate folosind iteratoare.
- Inserarea de date noi într-un vector se face la sfârșitul acestuia.
- Introducerea datelor într-un vector durează un timp diferențial.
- Îndepărtarea unui element dintr-un vector durează timp constant.
- Inserarea sau ștergerea unui element la început necesită timp liniar.
- Vectorii ar trebui să fie folosiți atunci când aveți de-a face cu elemente de date care se modifică în mod constant.
- De asemenea, puteți utiliza vectori dacă dimensiunea datelor nu este cunoscută înainte de a începe.