2D vektor v C++ s uživatelem definovanou velikostí
2D vektor je a vektor vektoru. Stejně jako 2D pole můžeme deklarovat a přiřadit hodnoty 2D vektoru!
Za předpokladu, že znáte normální vektor v C++, pomocí příkladu demonstrujeme, jak se 2D vektor liší od normálního vektoru níže:
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 { /* Prvek jedna se 2 hodnotami. */ {1, 2}, /* Prvek dva se 3 hodnotami. */ {4, 5, 6}, /* Prvek tři se 4 hodnotami. */ {7, 8, 9, 10} }; /* Nyní vytiskneme vektor, který jsme právě definovali, pomocí jednoduché vnořené smyčky for. */ for (int i = 0; i { for (int j = 0; j { cout < < vect[i][j] < < ' '; } cout < < endl; } return 0; }> |
Ve 2D vektoru je každý prvek vektorem.
Časová náročnost: O(1)
Pomocný prostor: 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(řádek); /* Na řádku 21 jsme vytvořili 2D vektor a přiřadili mu kapacitu 'řádku' (v tomto případě 5) jednotek. */ /* Nyní přistoupíme k vytvoření struktury našeho 2D vektoru přiřazením hodnoty řádků a sloupců pomocí vnořené smyčky for. */ for(int i = 0; i { /* Deklarování velikosti sloupce. */ int col = sloupec[i]; /* Na 43. řádku deklarujeme i-tý řádek k velikosti sloupce. Vytvoříme normální vektor kapacity 'col', který bude v každé iteraci cyklu for definovat hodnoty uvnitř každého řádku */ vec[i] = vector |
Výstup
1 2 3 4 5 6 7 8 9
Časová náročnost: O(N*N)
Pomocný prostor: O(N*N)
Další přístup k přístupu k vektorovým prvkům:
C++
<> div> id=> 'highlighter_223295'> class> => 'syntaxhighlighter nogutter '> >'0'cellpadding='0'cellspacing='0'>> |
Výstup
1 2 3 4 5 6 7 8 9
Časová náročnost: O(N*N)
Pomocný prostor: O(N*N)
Stejně jako zubatá pole Java může každý prvek 2D vektoru obsahovat jiný počet hodnot.
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 { /* Prvek jedna se 2 hodnotami. */ {1, 2}, /* Prvek dva se 3 hodnotami. */ {4, 5, 6}, /* Prvek tři se 4 hodnotami. */ {7, 8, 9, 10} }; /* Nyní vytiskneme vektor, který jsme právě definovali, pomocí jednoduché vnořené smyčky for. */ for (int i = 0; i { for (int j = 0; j { cout < < vect[i][j] < < ' '; } cout < < endl; } return 0; }> |
Výstup
1 2 4 5 6 7 8 9 10
Problém cvičení: Definujte 2D vektor s různými velikostmi sloupců.
Pří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 jsou často považovány za matici s řádky a sloupci uvnitř. Pod kapotou jsou vlastně prvky 2D vektoru.
Nejprve deklarujeme celočíselnou proměnnou s názvem řádek a poté pole s názvem sloupec, které bude obsahovat hodnotu velikosti každého řádku.
Poté přistoupíme k inicializaci paměti každého řádku podle velikosti sloupce.
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ýstup
1 2 3 4 5 1 2 3 1 2 3 4 1 2 1
Jiný přístup
Předpokládejme, že chceme inicializovat 2D vektor n řádky a m sloupce s hodnotou 0.
C++
Výstup
0 0 0 0 0 0 0 0 0 0 0 0
Časová náročnost: O(N*M)
Pomocný prostor: O(N*M)
Ještě jiný přístup:
Předpokládejme, že chceme vytvořit 2D vektor n řádky a m sloupce a vstupní hodnoty.
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ýstup
1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8
Časová náročnost: O(N*M)
Pomocný prostor: O(N*M)
Doufáme, že odcházíte z tohoto článku s lepším pochopením 2D vektorů a nyní jste dostatečně sebevědomí, abyste je mohli aplikovat sami.