vectors stl
Ruolo dei vettori in STL con esempi.
Finora, in questa serie C ++, abbiamo visto array statici che hanno una dimensione fissa.
Se nel mezzo del programma dobbiamo memorizzare più elementi nell'array, allora diventa impossibile e siamo sicuri di ottenere l'eccezione 'out_of_bound', nel momento in cui proviamo a memorizzare gli elementi oltre i limiti dell'array.
Una soluzione per questo è avere l'array dichiarato con la capacità massima in modo da non riscontrare alcun problema nella memorizzazione di più elementi in fase di esecuzione. Ma questa disposizione ha un grave svantaggio in quanto stiamo sprecando troppa memoria.
=> Controlla qui la serie completa di formazione C ++.
La risposta a tutti questi problemi è utilizzare un array dinamico che si espanderà da solo in base alle necessità. STL fornisce questo array dinamico sotto forma di un contenitore vettoriale.
Cosa imparerai:
- Come definiamo i vettori?
- Dichiarazione di un vettore in C ++ con std :: Vector Class
- Inizializza il vettore
- Iteratore vettoriale
- Funzioni vettoriali
- Capacità vettoriale
- Modificatori di vettore
- Vettore 2D
- Esempio di vettore
- Conclusione
- Lettura consigliata
Come definiamo i vettori?
I vettori sono contenitori di array dinamici che lo ridimensionano automaticamente quando gli elementi vengono inseriti o eliminati. La memorizzazione del vettore è gestita dal contenitore del vettore stesso.
Gli elementi nel vettore vengono memorizzati in posizioni contigue. Proprio come gli array, anche gli elementi vettoriali possono essere attraversati e accessibili tramite iteratori.
Dichiarazione di un vettore in C ++ con std :: Vector Class
Nella classe vettoriale STL ' std :: vector 'È definito sotto l'intestazione. Pertanto, per utilizzare un contenitore vettoriale, dovremmo includere questa intestazione nel nostro programma come mostrato di seguito:
#include
Possiamo dichiarare un vettore vuoto come mostrato di seguito:
std::vector myvec;
La riga di codice sopra creerà un vettore con gli elementi di tipo intero. In memoria, questo verrà visualizzato come myvec.
Inizializza il vettore
Possiamo inizializzare un vettore con valore al momento della dichiarazione.
java intervista domanda e risposta per più fresco
Questo viene fatto come segue:
#include int main() { std::vector myvec = {1, 1, 2, 3, 5}; }
Nel codice sopra, dichiariamo un vettore di tipo int denominato myvec contenente i primi cinque elementi nella sequenza di Fibonacci.
Il layout di memoria di questo vettore sarà il seguente:
Iteratore vettoriale
Come già accennato, utilizziamo gli iteratori per attraversare il vettore in modo sequenziale.
I vettori supportano le seguenti funzioni iteratore per spostarsi tra gli elementi:
- inizio() - Restituisce l'iteratore puntato al primo elemento del contenitore del vettore.
- fine() - Restituisce un iteratore che punta all'elemento che segue l'ultimo elemento nel vettore.
- rbegin () - Restituisce un iteratore inverso che punta all'ultimo elemento nel contenitore del vettore.
- render () - Restituisce un iteratore inverso che punta al primo elemento del contenitore del vettore.
- cbegin () - Restituisce un iteratore costante che punta al primo elemento nel contenitore del vettore.
- alcune() - Restituisce un iteratore costante che punta all'elemento che segue l'ultimo elemento del contenitore del vettore.
- crbegin () - Restituisce un iteratore di costante inversa che punta all'ultimo elemento nel contenitore del vettore.
- crend () - Restituisce un iteratore di costante inversa che punta al primo elemento nel contenitore del vettore.
Vediamo un esempio che dimostrerebbe queste funzioni iteratrici.Le altre funzioni possono essere utilizzate in modo simile.
#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; }
Produzione:
Output di Vector con inizio e fine: 2 3 4 5 6
Output di Vector con rbegin e rend: 6 5 4 3 2
Vettore di output di with cbegin e cend: 2 3 4 5 6
Vettore di output di with crbegin e crend: 6 5 4 3 2
Pertanto, in questo codice, dichiariamo un vettore e inseriamo valori in esso utilizzando la funzione push_back. Quindi visualizziamo i vettori utilizzando ciascuna delle funzioni iteratore che abbiamo descritto sopra. Come si vede dall'output a seconda delle funzioni iteratore utilizzate, l'ordine in cui viene visualizzato il vettore cambia.
Funzioni vettoriali
Ordinamento di un vettore
Possiamo usare algoritmi STL che abbiamo già visto sul vettore.
Di seguito è riportato l'esempio dell'utilizzo di 'Ordina' sul vettore.
#include #include #include using namespace std; int main() { vector myvec = {10,50,30,20,60,40}; cout<<'Original Vector'< Produzione:
Vettore originale
10 50 30 20 60 40
Vettore ordinato
10 20 30 40 50 60
Nell'esempio precedente, abbiamo inizializzato un vettore e quindi applicato un algoritmo di ordinamento per ordinare il vettore.
Elementi Di Stampa Di Un Vettore
I vettori possono essere stampati utilizzando un iteratore e il flusso 'cout'. Possiamo usare un iteratore per scorrere ciascuno degli elementi vettoriali e stamparli con cout.
Il seguente esempio mostra questo:
#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 << ' '; }
Produzione:
Output del vettore con inizio e fine: 3 4 5 6 7
Capacità vettoriale
Esistono varie funzioni che agiscono sui vettori per determinarne la dimensione, la dimensione massima, ecc.
Elenchiamo le funzioni come di seguito:
(i) Dimensione del vettore
La funzione size () restituisce il numero di elementi nel contenitore del vettore. Questa è la funzione incorporata della classe std :: vector e può essere utilizzata direttamente per trovare la dimensione del vettore.
come aprire file xml in Word
Vediamo un esempio di un vettore usando la funzione size ():
#include #include using namespace std; int main() { vector myvec = {1, 1, 2, 3, 5, 8}; cout << 'Vector Size : ' << myvec.size(); return 0; }
Produzione:
Dimensione vettoriale: 6
Nel programma precedente, abbiamo definito un vettore myvec composto da sei elementi. Successivamente, chiamiamo la funzione size () su myvec e mostra la dimensione corretta.
(ii) Ridimensionamento di un vettore
Possiamo anche ridimensionare un vettore alla dimensione desiderata in modo che possa contenere un numero 'n' di elementi. Ciò si ottiene con la funzione 'resize ()' della classe std :: vector. La funzione di ridimensionamento prende la dimensione del vettore come parametro e quindi ridimensiona il contenitore del vettore alla dimensione specificata.
Cerchiamo di capire questo con l'aiuto di un esempio.
#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; }
Produzione:
Gli elementi vettoriali sono: 1 1 2 3 5 8
Dimensione vettoriale dopo il ridimensionamento: 4
Gli elementi vettoriali dopo il ridimensionamento sono: 1 1 2 3
Nel programma sopra, inizialmente definiamo un vettore myvec di dimensione 6. Quindi chiamiamo la funzione di ridimensionamento su questo vettore con size = 4. Ciò significa che ora vogliamo ridimensionare il nostro vettore alla dimensione 4.
Dopo aver chiamato la funzione di ridimensionamento, stampiamo nuovamente il vettore. Vediamo che quando ridimensioniamo il vettore alla dimensione 4, gli elementi rimanenti vengono scartati e vengono visualizzati solo i 4 elementi del vettore.
Oltre alle funzioni di ridimensionamento e ridimensionamento, la classe vettoriale supporta anche altre funzioni che ci consentono di manipolare la capacità del vettore. Sono:
- max_size (): Restituisce la dimensione massima, ovvero il numero massimo di elementi che il vettore può contenere.
- capacità(): Restituisce la dimensione dello spazio di archiviazione attualmente allocato. Viene restituito in termini di numero di elementi.
- vuoto(): Controlla se il contenitore è vuoto.
- rimpicciolirsi per starci dentro(): Riduce la capacità del vettore per adattarla alle dimensioni e scarta tutti gli altri elementi.
- Riserva(): Riserva la capacità del vettore di contenere n elementi.
Modificatori di vettore
I modificatori sono operazioni o funzioni che possono essere utilizzate per modificare il contenuto del contenitore del vettore. Vedremo alcune delle principali funzioni che vengono utilizzate come modificatori.
Assegnazione di nuovi valori al vettore
Una delle funzioni modificatrici fornite da std :: vector è la funzione assign. La funzione Assign assegna nuovi valori al vettore sostituendo quelli vecchi.
Ciò è dimostrato nel seguente esempio.
#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) << ' '; }
Produzione:
Gli elementi del vettore: 10 10 10 10 10
Nel codice sopra, dichiariamo un vettore di tipo int. Quindi chiamiamo per assegnare una funzione con i parametri 5, 10. Ciò significa che intendiamo assegnare l'elemento 10 al vettore 5 volte. Quando visualizziamo il vettore, vediamo che il vettore ha 5 elementi, tutti con valore 5.
Cancellazione di un vettore
La funzione successiva fornita da std :: vector per modificare un vettore è la funzione 'cancella'. La funzione di cancellazione rimuove gli elementi dall'intervallo specificato o una posizione dal vettore.
Vediamo un esempio della funzione Cancella.
#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: '< Produzione:
Elementi vettoriali: 1 1 2 3 5
Dimensioni del vettore dopo la cancellazione: 4
Vettore dopo l'operazione di cancellazione: 1 2 3 5
Come mostrato nell'output sopra per la funzione di ridimensionamento, specifichiamo l'intervallo o la posizione dell'elemento da cancellare o rimuovere. Nell'esempio sopra, abbiamo specificato la posizione che punta al primo elemento nel vettore.
Inserisci elementi nel vettore
La classe vettoriale std :: vector fornisce ancora un'altra funzione per inserire valori nel vettore. La funzione di inserimento ci consente di inserire elementi nel vettore prima della posizione specificata.
Questo sarà chiaro con il seguente esempio.
#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) << ' '; }
Produzione:
Vettore iniziale: 2 3 4
Nuovo vettore dopo l'inserimento: 20 30 2 3 4
Il programma precedente dichiara inizialmente un vettore con 3 elementi. Quindi chiamiamo la funzione di inserimento due volte per inserire i valori 20 e 30 rispettivamente nella prima e nella seconda posizione nel vettore. Quindi visualizziamo il vettore modificato.
Scambio di contenuti vettoriali
La classe vettoriale ci fornisce anche la possibilità di scambiare o scambiare i contenuti di un vettore con quello di un altro vettore dello stesso tipo e dimensione. Ciò è possibile grazie alla funzione incorporata nel vettore 'swap'.
Considera la seguente parte di codice.
#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) << ' '; }
Produzione:
Vettore 1: 1 3
Vettore 2: 5 7
Dopo Swap
Vettore 1: 5 7
Vettore 2: 1 3
Il codice sopra mostra il contenuto di due vettori prima e dopo lo scambio.
Valori di compensazione nel vettore
In contrasto con la rimozione di uno o più elementi dal vettore utilizzando la funzione di cancellazione, abbiamo un'altra funzione 'Cancella' che ci permette di rimuovere tutti gli elementi nel contenitore del vettore.
Nel programma seguente, dimostriamo una chiara funzione del contenitore del vettore.
#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: '< Produzione:
Dimensione del vettore v1: 4
Vettore 1: 1 3 5 7
Dimensione del vettore v1 dopo la chiamata alla funzione di cancellazione: 0
Qui prima dichiariamo un vettore e poi inseriamo gli elementi al suo interno. Una volta chiamata la funzione clear (), vediamo che tutti gli elementi nel vettore vengono rimossi contemporaneamente.
a (pos)
Questa funzione restituisce il riferimento all'elemento nella posizione 'pos' all'interno del vettore.
Questa è una delle funzioni che viene utilizzata per accedere all'elemento vettoriale.
Un esempio è dato seguito:
#include #include using namespace std; int main() { // Assign vector vector myvec = {1,1,2,3,5,8}; cout<<'
Element at position 3 : '< Produzione:
Elemento in posizione 3: 3
Come mostrato nell'esempio, la funzione 'at' viene utilizzata per accedere all'elemento nel vettore nella posizione specificata.
Davanti
La funzione 'front' restituisce il riferimento al primo elemento del vettore. Questa è ancora un'altra funzione che usiamo per accedere agli elementi del contenitore del vettore.
L'esempio seguente mostra l'utilizzo della funzione 'front'.
#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 Produzione:
Vettore di ingresso: 1 1 2 3 5 8
Elemento nella parte anteriore del vettore: 1
Indietro
Simile alla funzione 'front', la funzione back viene utilizzata per accedere all'ultimo elemento del contenitore del vettore. La funzione 'back' restituisce un riferimento all'ultimo elemento nel contenitore del vettore.
qual è il miglior software di pulizia del computer
Il seguente esempio mostra l'utilizzo della funzione 'indietro'.
#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 Produzione:
Vettore di ingresso: 1 1 2 3 5 8
Elemento sul retro del vettore: 8
Trova un elemento nel vettore
La funzione 'trova' viene utilizzata per trovare se un particolare elemento (indicato come chiave) è presente o meno nel vettore. Questa funzione dovrebbe essere veloce ed efficiente. Una volta trovato il valore, la funzione ritorna.
L'esempio seguente mostra l'utilizzo della funzione di ricerca.
#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'; }
Produzione:
Vettore di ingresso: 1 1 2 3 5 8
Immettere la chiave da cercare: 0
Elemento non trovato
Vettore 2D
Il vettore bidimensionale è noto anche come 'vettore di vettore'. Proprio come gli array bidimensionali, anche gli elementi dei vettori bidimensionali sono disposti in forma di matrice.
Di seguito viene fornito un programma di esempio per il vettore 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< Produzione:
Vettore 2D:
1 3 5
7 9 11
13 15 17
Nell'esempio sopra, notare il modo in cui è definito il vettore 2D. È definito come un vettore all'interno di un altro vettore. Durante la visualizzazione di questo vettore 2D, utilizziamo lo stesso approccio della visualizzazione di array 2D.
Esempio di vettore
Di seguito è riportato un esempio vettoriale che contiene la maggior parte delle operazioni vettoriali.
#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: '< Produzione:
Gli elementi del vettore: 10 10 10 10 10
Il nuovo vettore dopo push_back: 10 10 10 10 10 5
Nuovo vettore dopo pop_back: 10 10 10 10 10
Nuovo vettore dopo l'inserimento: 20 10 10 10 10 10
Dimensioni del vettore dopo la cancellazione: 5
Dopo aver cancellato il primo elemento: 10 10 10 10 10
Di seguito è riportato lo screenshot per lo stesso.

Nell'esempio precedente, dichiariamo un vettore e quindi, utilizzando le funzioni assign e push_back, inseriamo gli elementi nel vettore. Quindi usiamo la funzione pop_back per rimuovere un elemento dalla fine del vettore. Dopodiché, aggiungiamo di nuovo un elemento al vettore utilizzando l'elemento insert e quindi cancelliamo l'elemento utilizzando la funzione di cancellazione.
Questo è un esempio end-to-end del contenitore vettoriale che mostra le sue varie funzioni.
Conclusione
Con questo, siamo arrivati alla fine di questo tutorial sul vettore.
Nel nostro prossimo tutorial, impareremo a conoscere il contenitore 'elenco' di STL che è simile alle linee di array e vettori.
=> Dai un'occhiata alla guida di formazione Perfect C ++ qui.
Lettura consigliata