logo

2D vektor v C++ s veľkosťou definovanou používateľom

2D vektor je a vektor vektora. Rovnako ako 2D polia môžeme deklarovať a priradiť hodnoty 2D vektoru!

Za predpokladu, že poznáte normálny vektor v C++, pomocou príkladu ukážeme, ako sa 2D vektor líši od normálneho vektora nižšie:



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 { /* Prvok jedna s 2 hodnotami. */ {1, 2}, /* Prvok dva s 3 hodnotami. */ {4, 5, 6}, /* Prvok tri so 4 hodnotami. */ {7, 8, 9, 10} }; /* Teraz vytlačíme vektor, ktorý sme práve definovali pomocou jednoduchého vnoreného cyklu for. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

V 2D vektore je každý prvok vektorom.

Časová zložitosť: O(1)

Pomocný priestor: 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(riadok); /* Na riadku 21 sme vytvorili 2D vektor a priradili mu kapacitu 'riadok' (v tomto prípade 5) jednotiek. */ /* Teraz pristúpime k vytvoreniu štruktúry nášho 2D vektora priradením hodnôt riadkov a stĺpcov pomocou vnoreného cyklu for. */ for(int i = 0; i { /* Deklarovanie veľkosti stĺpca. */ int col = stĺpec[i]; /* Na 43. riadku deklarujeme i-tý riadok na veľkosť stĺpca. Vytvoríme normálny vektor kapacity 'col', ktorý v každej iterácii cyklu for bude definovať hodnoty v každom riadku */ vec[i] = vektor (stĺpec); for(int j = 0; j { vec[i][j] = j + 1; } } /* Teraz konečne použijeme jednoduchý vnorený cyklus for na vytlačenie 2D vektora, ktorý sme práve vytvorili vyššie. */ for(int i = 0; i { for (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Výkon

1 2 3 4 5 6 7 8 9>

Časová zložitosť: O(N*N)

Pomocný priestor: O(N*N)

Ďalší spôsob prístupu k vektorovým prvkom:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* C++ kód na demonštráciu 2D vektora s prvkami (vektormi) vo vnútri. */div>
class='preprocesor'>#include div>
class='preprocesor'>#include div>
class='kľúčové slovo tučné'>pomocou>priestoru názvov>std; div>
class='undefined spaces'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='undefined spaces'>>/* Nižšie inicializujeme 2D vektor s názvom 'vect' na riadku 12 a potom deklarujeme hodnoty na riadku 14, 15 a 16. */div>
class='undefined spaces'> div>
class='undefined spaces'>>vectorclass='color1 bold'>intclass='plain'>>> vect div>
class='undefined spaces'>>{ div>
class='undefined spaces'>>{1, 2, 3}, div>
class='undefined spaces'>>{4, 5, 6}, div>
class='undefined spaces'>>{7, 8, 9} div>
class='nedefinované medzery'>>}; div>
class='undefined spaces'> div>
class='undefined spaces'>>/* Teraz vypíšeme hodnoty, ktoré sme práve deklarovali na riadkoch 14, 15 a 16 pomocou jednoduchého vnoreného cyklu for pomocou iterátora. */div>
class='undefined spaces'> div>
class='undefined spaces'>>/* vector vect Túto deklaráciu môžeme rozdeliť na dve časti, čo nám pomôže pochopiť nižšie uvedené pojmy. 1. vect je 2D vektor pozostávajúci z viacerých prvkov typu vector. 2. vektor je 1D vektor pozostávajúci z viacerých int dát. Takže môžeme použiť iterátor poskytovaný STL namiesto premennej i,j používanej v slučke for. Môže znížiť chyby, ktoré sa môžu vyskytnúť pri operáciách i, j (i++, j++) V nižšie uvedenom kóde používame iterátor na prístup k vektorovým prvkom. 1. Z 2D vektora vect získavame vektory vect1D typu vector. 2. Do x dostávame prvky int z vektora vect 1D vektora. */div>
class='undefined spaces'> div>
class='undefined spaces'>>for>(vectorintclass='plain'>> vect1D : vect) div>
class='undefined spaces'>>{ div>
class='undefined spaces'>>for>(class='color1 bold'>int>x : vect1D) div>
class='undefined spaces'>>{ div>
class='undefined spaces'>>cout<< x <<>' 'class='plain'>; div>
class='undefined spaces'>>} div>
class='undefined spaces'>>cout<< endl; div>
class='undefined spaces'>>} div>
class='undefined spaces'> div>
class='undefined spaces'>>return>0; div>
class='plain'>} div>div>div>>

>

>

Výkon

1 2 3 4 5 6 7 8 9>

Časová zložitosť: O(N*N)

Pomocný priestor: O(N*N)

Rovnako ako zubaté polia Java, každý prvok 2D vektora môže obsahovať iný počet hodnôt.

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 { /* Prvok jedna s 2 hodnotami. */ {1, 2}, /* Prvok dva s 3 hodnotami. */ {4, 5, 6}, /* Prvok tri so 4 hodnotami. */ {7, 8, 9, 10} }; /* Teraz vytlačíme vektor, ktorý sme práve definovali, pomocou jednoduchého vnoreného cyklu for. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Výkon

1 2 4 5 6 7 8 9 10>

Problém s cvičením: Definujte 2D vektor s rôznymi veľkosťami stĺpcov.
Príklady:

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>

2D vektory sa často považujú za maticu s riadkami a stĺpcami vo vnútri. Pod kapotou sú vlastne prvky 2D vektora.
Najprv deklarujeme celočíselnú premennú s názvom riadok a potom pole s názvom stĺpec, ktorý bude obsahovať hodnotu veľkosti každého riadku.

Potom pristúpime k inicializácii pamäte každého riadku podľa veľkosti stĺpca.

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

java int do char
>

>

Výkon

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

Iný prístup
Predpokladajme, že chceme inicializovať 2D vektor n riadky a m stĺpce s hodnotou 0.

C++




>

>

Výkon

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

Časová zložitosť: O(N*M)

Pomocný priestor: O(N*M)

Ešte jeden prístup:
Predpokladajme, že chceme vytvoriť 2D vektor n riadky a m stĺpcov a vstupných hodnôt.

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

>

>

Výkon

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

Časová zložitosť: O(N*M)

Pomocný priestor: O(N*M)

Dúfame, že odídete z tohto článku s lepším pochopením 2D vektorov a teraz ste dostatočne sebavedomí na to, aby ste ich mohli použiť sami.