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 |
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'cellpadding='0'cellspacing='0'>> |
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 |
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 |
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.