logo

Vector 2D în C++ cu dimensiune definită de utilizator

Un vector 2D este a vector a vectorului. La fel ca și tablourile 2D, putem declara și atribui valori unui vector 2D!

Presupunând că sunteți familiarizat cu un vector normal în C++, cu ajutorul unui exemplu demonstrăm mai jos cum diferă un vector 2D de un vector normal:



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 { /* Elementul unu cu 2 valori în el. */ {1, 2}, /* Elementul doi cu 3 valori în el. */ {4, 5, 6}, /* Elementul trei cu 4 valori în el. */ {7, 8, 9, 10} }; /* Acum tipărim vectorul pe care tocmai l-am definit folosind o buclă for imbricată simplă. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

Într-un vector 2D, fiecare element este un vector.

Complexitatea timpului: O(1)

Spațiu 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(rând); /* Pe linia 21 am creat un vector 2D și i-am atribuit o capacitate de 'rând' (în acest caz 5) unități. */ /* Acum vom continua la crearea structurii vectorului nostru 2D prin alocarea valorii rândurilor și coloanelor printr-o buclă imbricată for. */ for(int i = 0; i { /* Declararea dimensiunii coloanei. */ int col = coloana[i]; /* Pe a 43-a linie declarăm rândul i la dimensiunea coloanei. Creăm un vector normal de capacitate 'col' care în fiecare iterație a buclei for va defini valorile din interiorul fiecărui rând */vec[i] = vector (col); for(int j = 0; j { vec[i][j] = j + 1; } } /* Acum folosim în sfârșit o buclă for imbricată simplă pentru a imprima vectorul 2D pe care tocmai l-am creat mai sus. */ for(int i = 0; i { for (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Ieșire

1 2 3 4 5 6 7 8 9>

Complexitatea timpului: O(N*N)

Spațiu auxiliar: O(N*N)

O altă abordare pentru a accesa elementele vectoriale:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* Cod C++ pentru a demonstra un vector 2D cu elemente (vectori) în interiorul acestuia. */div>
class='preprocesor'>#include div>
class='preprocesor'>#include div>
class='keyword bold'>folosind>namespace>std; div>
class='spații nedefinite'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='spații nedefinite'>>/* Mai jos inițializam un vector 2D numit 'vect' pe linia 12 și apoi declarăm valorile pe linia 14, 15 și respectiv 16. */div>
class='spații nedefinite'> div>
class='spații nedefinite'>>vectorclass='color1 bold'>intclass='plain'>>> vect div>
class='spații nedefinite'>>{ div>
class='spații nedefinite'>>{1, 2, 3}, div>
class='spații nedefinite'>>{4, 5, 6}, div>
class='spații nedefinite'>>{7, 8, 9} div>
class='spații nedefinite'>>}; div>
class='spații nedefinite'> div>
class='spații nedefinite'>>/* Acum tipărim valorile pe care tocmai le-am declarat pe liniile 14, 15 și 16 folosind o buclă for imbricată simplă cu ajutorul iteratorului. */div>
class='spații nedefinite'> div>
class='spații nedefinite'>>/* vector vect Putem împărți această declarație în două părți, ceea ce ne va ajuta să înțelegem conceptele de mai jos. 1. vect este un vector 2D format din mai multe elemente de tip vector. 2. vector este un vector 1D format din date int multiple. Deci putem folosi iteratorul furnizat de STL în loc de variabila i,j folosită în bucla for. Poate reduce eroarea care se poate întâmpla cu operațiunile i, j (i++, j++) În codul de mai jos, folosim iteratorul pentru a accesa elementele vectoriale. 1. Obținem vectori vect1D de tip vector din vectorul 2D vect. 2. Obținem int elemente la x din vectorul vector vect 1D. */div>
class='spații nedefinite'> div>
class='spații nedefinite'>>pentru>(vectorintclass='plain'>> vect1D : vect) div>
class='spații nedefinite'>>{ div>
class='spații nedefinite'>>for>(class='color1 bold'>int>x: vect1D) div>
class='spații nedefinite'>>{ div>
class='spații nedefinite'>>cout<< x <<>' 'class='plain'>; div>
class='spații nedefinite'>>} div>
class='spații nedefinite'>>cout<< endl; div>
class='spații nedefinite'>>} div>
class='spații nedefinite'> div>
class='spații nedefinite'>>return>0; div>
class='plain'>} div>div>div>>

>

>

Ieșire

1 2 3 4 5 6 7 8 9>

Complexitatea timpului: O(N*N)

Spațiu auxiliar: O(N*N)

La fel ca și matricele zimțate din Java, fiecare element al unui vector 2D poate conține un număr diferit de 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 { /* Elementul unu cu 2 valori în el. */ {1, 2}, /* Elementul doi cu 3 valori în el. */ {4, 5, 6}, /* Elementul trei cu 4 valori în el. */ {7, 8, 9, 10} }; /* Acum tipărim vectorul pe care tocmai l-am definit folosind o buclă for imbricată simplă. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Ieșire

1 2 4 5 6 7 8 9 10>

Problema exercițiului: Definiți vectorul 2D cu diferite dimensiuni de coloane.
Exemple:

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>

Vectorii 2D sunt adesea tratați ca o matrice cu rânduri și coloane în interiorul acesteia. Sub capotă sunt de fapt elemente ale vectorului 2D.
Mai întâi declarăm o variabilă întreagă numită rând și apoi o matrice numită coloană care va păstra valoarea mărimii fiecărui rând.

După aceea, procedăm la inițializarea memoriei fiecărui rând după dimensiunea coloanei.

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; }>

găsiți numere blocate pe Android
>

>

Ieșire

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

O altă abordare
Să presupunem că vrem să inițializam un vector 2D de n rânduri și m coloane, cu valoarea 0.

C++




>

>

Ieșire

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

Complexitatea timpului: O(N*M)

Spațiu auxiliar: O(N*M)

O altă abordare:
Să presupunem că vrem să creăm un vector 2D de n rânduri și m coloane și valori de intrare.

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; }>

>

>

Ieșire

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

Complexitatea timpului: O(N*M)

Spațiu auxiliar: O(N*M)

Sperăm că veți lăsa acest articol cu ​​o mai bună înțelegere a vectorilor 2D și că acum sunteți suficient de încrezători pentru a-i aplica pe cont propriu.