logo

2D vektor v C++ z uporabniško določeno velikostjo

2D vektor je a vektor vektorja. Tako kot 2D nizom lahko tudi 2D vektorju deklariramo in mu dodelimo vrednosti!

Ob predpostavki, da poznate normalni vektor v C++, s pomočjo primera prikazujemo, kako se 2D vektor razlikuje od normalnega vektorja spodaj:



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 { /* Prvi element z 2 vrednostma v njem. */ {1, 2}, /* Drugi element s 3 vrednostmi v njem. */ {4, 5, 6}, /* Tretji element s 4 vrednostmi v njem. */ {7, 8, 9, 10} }; /* Sedaj natisnemo vektor, ki smo ga pravkar definirali z uporabo preproste ugnezdene zanke for. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

V 2D vektorju je vsak element vektor.

Časovna zapletenost: O(1)

Pomožni 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(vrstica); /* V vrstici 21 smo ustvarili 2D vektor in mu dodelili kapaciteto 'vrstice' (v tem primeru 5) enot. */ /* Zdaj bomo nadaljevali z ustvarjanjem strukture našega 2D vektorja z dodeljevanjem vrednosti vrstic in stolpcev prek ugnezdene zanke for. */ for(int i = 0; i { /* Deklaracija velikosti stolpca. */ int col = column[i]; /* V 43. vrstici deklariramo i-to vrstico na velikost stolpca. Ustvarimo običajni vektor zmogljivosti 'col', ki bo v vsaki ponovitvi zanke for definiral vrednosti znotraj vsake vrstice */ vec[i] = vektor (col); for(int j = 0; j { vec[i][j] = j + 1; } } /* Zdaj končno uporabimo preprosto ugnezdeno zanko for za tiskanje 2D vektorja, ki smo ga pravkar ustvarili zgoraj. */ for(int i = 0; { for (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Izhod

1 2 3 4 5 6 7 8 9>

Časovna zapletenost: O(N*N)

Pomožni prostor: O(N*N)

Drug pristop za dostop do vektorskih elementov:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* Koda C++ za prikaz 2D vektorja z elementi (vektorji) v njem. */div>
class='preprocessor'>#include div>
class='preprocessor'>#include div>
class='keyword bold'>using>namespace>std; div>
class='nedefinirani prostori'> div>
class='color1 krepko'>int>main() div>
class='plain'>{ div>
class='undefined spaces'>>/* Spodaj inicializiramo 2D vektor z imenom 'vect' v vrstici 12 in nato deklariramo vrednosti v vrstici 14, 15 oziroma 16. */div>
class='nedefinirani prostori'> div>
class='nedefinirani presledki'>>vectorclass='color1 bold'>intclass='plain'>>> vect div>
class='nedefinirani presledki'>>{ div>
class='nedefinirani presledki'>>{1, 2, 3}, div>
class='nedefinirani presledki'>>{4, 5, 6}, div>
class='nedefinirani presledki'>>{7, 8, 9} div>
class='nedefinirani presledki'>>}; div>
class='nedefinirani prostori'> div>
class='undefined spaces'>>/* Zdaj natisnemo vrednosti, ki smo jih pravkar deklarirali v vrsticah 14, 15 in 16 z uporabo preproste ugnezdene zanke for s pomočjo iteratorja. */div>
class='nedefinirani prostori'> div>
class='undefined spaces'>>/* vector vect To deklaracijo lahko razdelimo na dva dela, kar nam bo pomagalo razumeti spodnje koncepte. 1. vect je 2D vektor, sestavljen iz več elementov tipa vektor. 2. vektor je 1D vektor, sestavljen iz več int podatkov. Tako lahko uporabimo iterator, ki ga zagotavlja STL, namesto spremenljivke i,j, ki se uporablja v zanki for. Lahko zmanjša napako, ki se lahko zgodi pri operacijah i, j(i++, j++). V spodnji kodi uporabljamo iterator za dostop do vektorskih elementov. 1. Iz 2D vektorja vect pridobivamo vektorje vect1D tipa vektor. 2. Pridobivamo int elemente v x iz vektorja vect 1D vektorja. */div>
class='nedefinirani prostori'> div>
class='nedefinirani presledki'>>za>(vektorintclass='plain'>> vect1D : vect) div>
class='nedefinirani presledki'>>{ div>
class='nedefinirani presledki'>>for>(class='color1 bold'>int>x : vect1D) div>
class='nedefinirani presledki'>>{ div>
class='nedefinirani presledki'>>cout<< x <<>' 'class='plain'>; div>
class='nedefinirani prostori'>>} div>
class='nedefinirani presledki'>>cout<< endl; div>
class='nedefinirani prostori'>>} div>
class='nedefinirani prostori'> div>
class='nedefinirani presledki'>>return>0; div>
class='plain'>} div>div>div>>

>

>

Izhod

1 2 3 4 5 6 7 8 9>

Časovna zapletenost: O(N*N)

Pomožni prostor: O(N*N)

Tako kot Javin nazobčani nizi lahko vsak element 2D vektorja vsebuje različno število vrednosti.

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 { /* Prvi element z 2 vrednostma v njem. */ {1, 2}, /* Drugi element s 3 vrednostmi v njem. */ {4, 5, 6}, /* Tretji element s 4 vrednostmi v njem. */ {7, 8, 9, 10} }; /* Sedaj natisnemo vektor, ki smo ga pravkar definirali z uporabo preproste ugnezdene zanke for. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Izhod

1 2 4 5 6 7 8 9 10>

Težava pri vadbi: Definirajte 2D vektor z različnimi velikostmi stolpcev.
Primeri:

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 vektorji se pogosto obravnavajo kot matrika z vrsticami in stolpci v njej. Pod pokrovom so pravzaprav elementi 2D vektorja.
Najprej deklariramo celoštevilsko spremenljivko z imenom vrstica in nato matriko z imenom stolpec, ki bo vsebovala vrednost velikosti vsake vrstice.

Po tem nadaljujemo z inicializacijo pomnilnika vsake vrstice glede na velikost stolpca.

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

panjska arhitektura
>

>

Izhod

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

Drug pristop
Recimo, da želimo inicializirati 2D vektor n vrstice in m stolpci z vrednostjo 0.

C++




>

>

Izhod

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

Časovna zapletenost: O(N*M)

Pomožni prostor: O(N*M)

Še en pristop:
Recimo, da želimo ustvariti 2D vektor od n vrstice in m stolpce in vnosne vrednosti.

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

>

>

Izhod

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

Časovna zapletenost: O(N*M)

Pomožni prostor: O(N*M)

Upamo, da ste ta članek zapustili z boljšim razumevanjem 2D vektorjev in ste zdaj dovolj samozavestni, da jih lahko uporabite sami.