logo

2D-vektor i C++ med brukerdefinert størrelse

En 2D-vektor er en vektor av vektoren. Som 2D-matriser kan vi deklarere og tilordne verdier til en 2D-vektor!

Forutsatt at du er kjent med en normalvektor i C++, viser vi ved hjelp av et eksempel hvordan en 2D-vektor skiller seg fra en normalvektor nedenfor:



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 { /* Element en med 2 verdier i seg. */ {1, 2}, /* Element to med 3 verdier i. */ {4, 5, 6}, /* Element tre med 4 verdier i. */ {7, 8, 9, 10} }; /* Nå skriver vi ut vektoren som vi nettopp definerte ved å bruke en enkel nestet for-løkke. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

I en 2D-vektor er hvert element en vektor.

Tidskompleksitet: O(1)

Hjelpeplass: 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(rad); /* På linje 21 laget vi en 2D-vektor og tildelte den en kapasitet på 'row'(i dette tilfellet 5) enheter. */ /* Nå skal vi fortsette å lage strukturen til 2D-vektoren vår ved å tilordne verdien av rader og kolonner gjennom en nestet for-løkke. */ for(int i = 0; i { /* Deklarerer størrelsen på kolonnen. */ int col = kolonne[i]; /* På 43. linje erklærer vi den i-te raden til størrelsen på kolonnen. Vi lager en normal vektor med kapasitet 'col' som i hver iterasjon av for-løkken vil definere verdiene inne i hver rad */vec[i] = vektor (kol); for(int j = 0; j { vec[i][j] = j + 1; } } /* Vi bruker nå endelig en enkel nestet for-løkke for å skrive ut 2D-vektoren som vi nettopp opprettet ovenfor. */ for(int i = 0; i { for (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Produksjon

1 2 3 4 5 6 7 8 9>

Tidskompleksitet: O(N*N)

Hjelpeplass: O(N*N)

En annen tilnærming for å få tilgang til vektorelementene:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* C++-kode for å demonstrere en 2D-vektor med elementer(vektorer) inni den. */div>
class='preprocessor'>#include div>
class='preprocessor'>#include div>
class='søkeord fet'>bruker>navneområde>std; div>
class='udefinerte mellomrom'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='undefined spaces'>>/* Nedenfor initialiserer vi en 2D-vektor kalt 'vect' på linje 12 og deretter erklærer vi verdiene på linje 14, 15 og 16 henholdsvis. */div>
class='udefinerte mellomrom'> 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='udefinerte mellomrom'>>}; div>
class='udefinerte mellomrom'> div>
class='undefined spaces'>>/* Nå skriver vi ut verdiene som vi nettopp erklærte på linje 14, 15 og 16 ved å bruke en enkel nestet for-løkke ved hjelp av iterator. */div>
class='udefinerte mellomrom'> div>
class='undefined spaces'>>/* vektor vect Vi kan dele denne erklæringen i to deler, som vil hjelpe oss å forstå begrepene nedenfor. 1. vect er en 2D-vektor som består av flere elementer av typen vektor. 2. vektor er en 1D-vektor som består av flere int-data. Så vi kan bruke iterator levert av STL i stedet for i,j variabel brukt i for loop. Det kan redusere feilen som kan skje med i, j operasjoner(i++, j++) I koden nedenfor bruker vi iterator for å få tilgang til vektorelementene. 1. Vi får vect1D vektorer av typen vektor fra 2D vektoren vect. 2. Vi får int-elementer til x fra vektoren vect 1D vektoren. */div>
class='udefinerte mellomrom'> div>
class='udefinerte mellomrom'>>for>(vektorintclass='plain'>> vect1D : vect) div>
class='udefinerte mellomrom'>>{ div>
class='undefined spaces'>>for>(class='color1 bold'>int>x : vect1D) div>
class='udefinerte mellomrom'>>{ div>
class='undefined spaces'>>cout<< x <<>' 'class='plain'>; div>
class='undefined spaces'>>} div>
class='undefined spaces'>>cout<< endl; div>
class='undefined spaces'>>} div>
class='udefinerte mellomrom'> div>
class='udefinerte mellomrom'>>retur>0; div>
class='plain'>} div>div>div>>

>

>

Produksjon

1 2 3 4 5 6 7 8 9>

Tidskompleksitet: O(N*N)

Hjelpeplass: O(N*N)

I likhet med Javas taggete arrays kan hvert element i en 2D-vektor inneholde et annet antall verdier.

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 { /* Element én med 2 verdier i. */ {1, 2}, /* Element to med 3 verdier i. */ {4, 5, 6}, /* Element tre med 4 verdier i. */ {7, 8, 9, 10} }; /* Nå skriver vi ut vektoren som vi nettopp definerte ved å bruke en enkel nestet for-løkke. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Produksjon

1 2 4 5 6 7 8 9 10>

Treningsproblem: Definer 2D-vektoren med forskjellige størrelser på kolonner.
Eksempler:

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-vektorer blir ofte behandlet som en matrise med rader og kolonner inni den. Under panseret er de faktisk elementer av 2D-vektoren.
Vi erklærer først en heltallsvariabel kalt rad og deretter en matrise kalt kolonne som skal inneholde verdien av størrelsen på hver rad.

Etter det fortsetter vi med å initialisere minnet til hver rad etter størrelsen på kolonnen.

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

sql rekkefølge etter dato
>

>

Produksjon

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

En annen tilnærming
Anta at vi ønsker å initialisere en 2D-vektor av n rader og m kolonner, med verdien 0.

C++




>

>

Produksjon

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

Tidskompleksitet: PÅ M)

Hjelpeplass: PÅ M)

Enda en tilnærming:
Anta at vi ønsker å lage en 2D-vektor av n rader og m kolonner og inngangsverdier.

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

>

>

Produksjon

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

Tidskompleksitet: PÅ M)

Hjelpeplass: PÅ M)

Vi håper du forlater denne artikkelen med en bedre forståelse av 2D-vektorer og nå er trygg nok til å bruke dem på egen hånd.