logo

Vettore 2D in C++ con dimensioni definite dall'utente

Un vettore 2D è a vettore del vettore. Come gli array 2D, possiamo dichiarare e assegnare valori a un vettore 2D!

Supponendo che tu abbia familiarità con un vettore normale in C++, con l'aiuto di un esempio dimostreremo come un vettore 2D differisce da un vettore normale di seguito:



C++






/*> C++ program to demonstrate a 2D vector where> each of its elements is of different size.> */> #include> #include> using> namespace> std;> int> main()> {> >/*> >We initialize a 2D vector> >named 'vect' on line 16 with> >different number of values> >in each element.> >*/> > >vectorint>> vect { /* Elemento uno con 2 valori al suo interno. */ {1, 2}, /* Elemento due con 3 valori al suo interno. */ {4, 5, 6}, /* Elemento tre con 4 valori al suo interno. */ {7, 8, 9, 10} }; /* Ora stampiamo il vettore che abbiamo appena definito utilizzando un semplice ciclo for nidificato. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

In un vettore 2D, ogni elemento è un vettore.

Complessità temporale: O(1)

Spazio ausiliario: O(1)

C++




/*> C++ program to create a 2D vector where> every row has a certain number of values> as defined by the user.(On line 13)> */> > #include> #include> using> namespace> std;> int> main()> {> > >/* Here we tell how many rows> >the 2D vector is going to have. */> >int> row = 5;> > >/* We define the number of values> >each row is supposed to have. */> >int> column[] = {5, 3, 4, 2, 1};> > >/*> >We now create a vector of vector with size> >equal to row.> >*/> > >vectorint>> vec(riga); /* Alla riga 21 abbiamo creato un vettore 2D e gli abbiamo assegnato una capacità di unità 'riga'(in questo caso 5). */ /* Ora procederemo a creare la struttura del nostro vettore 2D assegnando il valore di righe e colonne tramite un ciclo for nidificato. */ for(int i = 0; i { /* Dichiara la dimensione della colonna. */ int col = column[i]; /* Sulla 43a riga dichiariamo la i-esima riga con la dimensione della colonna. Creiamo un normale vettore di capacità 'col' che in ogni iterazione del ciclo for definirà i valori all'interno di ogni riga */ vec[i] = vettore (col); for(int j = 0; j { vec[i][j] = j + 1; } } /* Ora finalmente utilizziamo un semplice ciclo for nidificato per stampare il vettore 2D che abbiamo appena creato sopra. */ for(int i = 0; i { for (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Produzione

1 2 3 4 5 6 7 8 9>

Complessità temporale: O(N*N)

Spazio ausiliario: O(N*N)

Un altro approccio per accedere agli elementi vettoriali:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* Codice C++ per dimostrare un vettore 2D con elementi (vettori) al suo interno. */div>
class='preprocessore'>#include div>
class='preprocessore'>#include div>
class='parola chiave in grassetto'>using>namespace>std; div>
class='spazi non definiti'> div>
class='color1 bold'>int>main() div>
class='semplice'>{ div>
class='spazi non definiti'>>/* Di seguito inizializziamo un vettore 2D chiamato 'vect' alla riga 12 e poi dichiariamo i valori rispettivamente alla riga 14, 15 e 16. */div>
class='spazi non definiti'> div>
class='spazi non definiti'>>vettoreclass='color1 bold'>intclass='plain'>>> vect div>
class='spazi non definiti'>>{ div>
class='spazi non definiti'>>{1, 2, 3}, div>
class='spazi non definiti'>>{4, 5, 6}, div>
class='spazi non definiti'>>{7, 8, 9} div>
class='spazi non definiti'>>}; div>
class='spazi non definiti'> div>
class='spazi non definiti'>>/* Ora stampiamo i valori che abbiamo appena dichiarato alle righe 14, 15 e 16 utilizzando un semplice ciclo for nidificato con l'aiuto dell'iteratore. */div>
class='spazi non definiti'> div>
class='spazi non definiti'>>/* vettore vect Possiamo dividere questa dichiarazione in due parti, che ci aiuteranno a comprendere i concetti seguenti. 1. vect è un vettore 2D costituito da più elementi di tipo vettore. 2. vettore è un vettore 1D costituito da più dati int. Quindi possiamo usare l'iteratore fornito da STL invece della variabile i,j utilizzata nel ciclo for. Può ridurre l'errore che può verificarsi rispetto alle operazioni i, j (i++, j++) Nel codice seguente utilizziamo l'iteratore per accedere agli elementi vettoriali. 1. Stiamo ottenendo vettori vect1D di tipo vettore dal vettore 2D vect. 2. Stiamo ottenendo gli elementi int in x dal vettore vect 1D. */div>
class='spazi non definiti'> div>
class='spazi non definiti'>>for>(vettoreintclass='plain'>> vect1D : vect) div>
class='spazi non definiti'>>{ div>
class='spazi non definiti'>>for>(class='color1 bold'>int>x : vect1D) div>
class='spazi non definiti'>>{ div>
class='spazi non definiti'>>cout<< x <<>' 'class='semplice'>; div>
class='spazi non definiti'>>} div>
class='spazi non definiti'>>cout<< endl; div>
class='spazi non definiti'>>} div>
class='spazi non definiti'> div>
class='spazi non definiti'>>return>0; div>
class='plain'>} div>div>div>>

>

>

Produzione

1 2 3 4 5 6 7 8 9>

Complessità temporale: O(N*N)

Spazio ausiliario: O(N*N)

Come gli array frastagliati di Java, ogni elemento di un vettore 2D può contenere un numero diverso di valori.

C++




/*> C++ program to demonstrate a 2D vector where> each of its elements is of different size.> */> #include> #include> using> namespace> std;> int> main()> {> >/*> >We initialize a 2D vector> >named 'vect' on line 16 with> >different number of values> >in each element.> >*/> > >vectorint>> vect { /* Elemento uno con 2 valori al suo interno. */ {1, 2}, /* Elemento due con 3 valori al suo interno. */ {4, 5, 6}, /* Elemento tre con 4 valori al suo interno. */ {7, 8, 9, 10} }; /* Ora stampiamo il vettore che abbiamo appena definito utilizzando un semplice ciclo for nidificato. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Produzione

1 2 4 5 6 7 8 9 10>

Problema di esercizio: Definisci il vettore 2D con diverse dimensioni di colonne.
Esempi:

Input : Number of rows : 5 Number of columns in rows : 2 3 4 5 1 Output : 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 Input : Number of rows : 3 Number of columns in rows : 3 2 1 Output : 1 2 3 1 2 1>

I vettori 2D sono spesso trattati come una matrice con righe e colonne al suo interno. Sotto il cofano ci sono in realtà elementi del vettore 2D.
Dichiariamo prima una variabile intera denominata riga e quindi un array denominato colonna che conterrà il valore della dimensione di ciascuna riga.

Successivamente procediamo a inizializzare la memoria di ogni riga in base alla dimensione della colonna.

C++




// CPP program> #include> #include> using> namespace> std;> int> main()> {> >int> n = 4;> >int> m = 5;> > >/*> >Create a vector containing 'n'> >vectors each of size 'm'.> >*/> >vectorint>> vec( n , vettore (M)); for(int i = 0; i { for(int j = 0; j { vec[i][j] = j + i + 1; } } for(int i = 0; i { for(int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

disinstallare angolare cli
>

>

Produzione

1 2 3 4 5 1 2 3 1 2 3 4 1 2 1>

Un altro approccio
Supponiamo di voler inizializzare un vettore 2D di N righe e M colonne, con un valore 0.

C++




>

>

Produzione

0 0 0 0 0 0 0 0 0 0 0 0>

Complessità temporale: O(N*M)

Spazio ausiliario: O(N*M)

Ancora un altro approccio:
Supponiamo di voler creare un vettore 2D di N righe e M colonne e valori di input.

C++




// CPP program> #include> #include> using> namespace> std;> int> main()> {> >int> n = 4;> >int> m = 5;> > >/*> >Create a vector containing 'n'> >vectors each of size 'm'.> >*/> >vectorint>> vec( n , vettore (M)); for(int i = 0; i { for(int j = 0; j { vec[i][j] = j + i + 1; } } for(int i = 0; i { for(int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Produzione

1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8>

Complessità temporale: O(N*M)

Spazio ausiliario: O(N*M)

Ci auguriamo che lascerai questo articolo con una migliore comprensione dei vettori 2D e che ora sarai abbastanza sicuro da applicarli da solo.