logo

Vector 2D en C++ amb mida definida per l'usuari

Un vector 2D és a vector del vector. Com les matrius 2D, podem declarar i assignar valors a un vector 2D!

Suposant que esteu familiaritzat amb un vector normal en C++, amb l'ajuda d'un exemple demostrem com un vector 2D difereix d'un vector normal a continuació:



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 { /* Element 1 amb 2 valors. */ {1, 2}, /* Element dos amb 3 valors. */ {4, 5, 6}, /* Element tres amb 4 valors. */ {7, 8, 9, 10} }; /* Ara imprimim el vector que acabem de definir amb un simple bucle for imbricat. */ per (int i = 0; i { per (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

En un vector 2D, cada element és un vector.

Complexitat temporal: O(1)

Espai auxiliar: 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(fila); /* A la línia 21 vam crear un vector 2D i li vam assignar una capacitat de 'fila'(en aquest cas 5) unitats. */ /* Ara procedirem a crear l'estructura del nostre vector 2D assignant el valor de files i columnes mitjançant un bucle for imbricat. */ for(int i = 0; i { /* Declaració de la mida de la columna. */ int col = column[i]; /* A la línia 43, declarem la i-a fila a la mida de la columna. Creem un vector normal de capacitat 'col' que en cada iteració del bucle for definirà els valors dins de cada fila */vec[i] = vector (col); for(int j = 0; j {vec[i][j] = j + 1; } } /* Finalment, fem servir un bucle for imbricat senzill per imprimir el vector 2D que acabem de crear a dalt. */ for(int i = 0; i { per (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Sortida

1 2 3 4 5 6 7 8 9>

Complexitat temporal: O(N*N)

Espai auxiliar: O(N*N)

Un altre enfocament per accedir als elements vectorials:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comentaris'>/* Codi C++ per demostrar un vector 2D amb elements (vectors) al seu interior. */div>
class='preprocessador'>#include div>
class='preprocessador'>#include div>
class='keyword bold'>usant>namespace>std; div>
class='espais indefinits'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='espais no definits'>>/* A continuació inicialitzem un vector 2D anomenat 'vect' a la línia 12 i després declarem els valors a la línia 14, 15 i 16 respectivament. */div>
class='espais indefinits'> div>
class='espais no definits'>>vectorclass='color1 bold'>intclass='plain'>>> vect div>
class='espais indefinits'>>{ div>
class='espais no definits'>>{1, 2, 3}, div>
class='espais indefinits'>>{4, 5, 6}, div>
class='espais indefinits'>>{7, 8, 9} div>
class='espais indefinits'>>}; div>
class='espais indefinits'> div>
class='espais indefinits'>>/* Ara imprimim els valors que acabem de declarar a les línies 14, 15 i 16 utilitzant un simple bucle for imbricat amb l'ajuda de l'iterador. */div>
class='espais indefinits'> div>
class='espais indefinits'>>/* vector vect Podem dividir aquesta declaració en dues parts, que ens ajudaran a entendre els conceptes següents. 1. vect és un vector 2D format per múltiples elements de tipus vector. 2. vector és un vector 1D format per múltiples dades int. Així que podem utilitzar l'iterador proporcionat per STL en lloc de la variable i,j utilitzada al bucle for. Pot reduir l'error que pot passar amb les operacions i, j (i++, j++) En el codi següent estem utilitzant un iterador per accedir als elements vectorials. 1. Estem obtenint vectors vect1D de tipus vector del vector 2D vect. 2. Estem aconseguint int elements a x del vector vect vector 1D. */div>
class='espais indefinits'> div>
class='espais indefinits'>>per>(vectorintclass='plain'>> vect1D: vect) div>
class='espais indefinits'>>{ div>
class='espais no definits'>>for>(class='color1 bold'>int>x: vect1D) div>
class='espais indefinits'>>{ div>
class='espais indefinits'>>cout<< x <<>' 'class='plain'>; div>
class='espais indefinits'>>} div>
class='espais indefinits'>>cout<< endl; div>
class='espais indefinits'>>} div>
class='espais indefinits'> div>
class='espais indefinits'>>retorn>0; div>
class='plain'>} div>div>div>>

>

>

Sortida

1 2 3 4 5 6 7 8 9>

Complexitat temporal: O(N*N)

Espai auxiliar: O(N*N)

Igual que les matrius irregulars de Java, cada element d'un vector 2D pot contenir un nombre diferent de valors.

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 { /* Element 1 amb 2 valors. */ {1, 2}, /* Element dos amb 3 valors. */ {4, 5, 6}, /* Element tres amb 4 valors. */ {7, 8, 9, 10} }; /* Ara imprimim el vector que acabem de definir utilitzant un bucle for imbricat senzill. */ per (int i = 0; i { per (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Sortida

1 2 4 5 6 7 8 9 10>

Problema de l'exercici: Definiu el vector 2D amb diferents mides de columnes.
Exemples:

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>

Els vectors 2D sovint es tracten com una matriu amb files i columnes al seu interior. Sota el capó són en realitat elements del vector 2D.
Primer declarem una variable entera anomenada fila i després una matriu anomenada columna que conté el valor de la mida de cada fila.

Després d'això, procedim a inicialitzar la memòria de cada fila per la mida de la columna.

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 , vector (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; }>

tojson java
>

>

Sortida

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

Un altre Enfocament
Suposem que volem inicialitzar un vector 2D de n files i m columnes, amb un valor 0.

C++




>

>

Sortida

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

Complexitat temporal: O(N*M)

Espai auxiliar: O(N*M)

Un altre enfocament:
Suposem que volem crear un vector 2D de n files i m columnes i valors d'entrada.

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 , vector (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; }>

>

>

Sortida

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

Complexitat temporal: O(N*M)

Espai auxiliar: O(N*M)

Esperem que deixeu aquest article amb una millor comprensió dels vectors 2D i ara tingueu prou confiança per aplicar-los pel vostre compte.