logo

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 (sloupec); for(int j = 0; j { vec[i][j] = j + 1; } } /* Nyní konečně použijeme jednoduchý vnořený cyklus for k vytištění 2D vektoru, který jsme právě vytvořili výše. */ for(int i = 0; i { for (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

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'>>
class='comments'>/* Kód C++ pro demonstraci 2D vektoru s prvky (vektory) uvnitř. */div>
class='preprocesor'>#include div>
class='preprocesor'>#include div>
class='klíčové slovo tučné'>používání>jmenného prostoru>std; div>
class='undefined spaces'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='undefined spaces'>>/* Níže inicializujeme 2D vektor s názvem 'vect' na řádku 12 a poté deklarujeme hodnoty na řádku 14, 15 a 16 v tomto pořadí. */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='undefined spaces'>>}; div>
class='undefined spaces'> div>
class='undefined spaces'>>/* Nyní vytiskneme hodnoty, které jsme právě deklarovali na řádcích 14, 15 a 16 pomocí jednoduchého vnořeného cyklu for pomocí iterátoru. */div>
class='undefined spaces'> div>
class='undefined spaces'>>/* vector vect Tuto deklaraci můžeme rozdělit na dvě části, což nám pomůže pochopit níže uvedené pojmy. 1. vect je 2D vektor skládající se z více prvků typu vector. 2. vector je 1D vektor skládající se z více int dat. Můžeme tedy použít iterátor poskytovaný STL namísto proměnné i,j používané ve smyčce for. Může snížit chybu, která se může stát při operacích i, j (i++, j++) V níže uvedeném kódu používáme iterátor pro přístup k vektorovým prvkům. 1. Z 2D vektoru vect získáváme vektory vect1D typu vector. 2. Dostáváme prvky int do x z vektoru vect 1D vektoru. */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ý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 (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ý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 (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ý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.