logo

2D-vektor i C++ med användardefinierad storlek

En 2D-vektor är en vektor av vektorn. Liksom 2D-matriser kan vi deklarera och tilldela värden till en 2D-vektor!

Förutsatt att du är bekant med en normalvektor i C++ visar vi med hjälp av ett exempel hur en 2D-vektor skiljer sig från en normalvektor nedan:



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 ett med 2 värden i sig. */ {1, 2}, /* Element två med 3 värden i. */ {4, 5, 6}, /* Element tre med 4 värden i. */ {7, 8, 9, 10} }; /* Nu skriver vi ut vektorn som vi just definierat med en enkel kapslad för-loop. */ för (int i = 0; i { för (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

I en 2D-vektor är varje element en vektor.

Tidskomplexitet: O(1)

Hjälputrymme: 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å rad 21 skapade vi en 2D-vektor och tilldelade den en kapacitet på 'rad'(i detta fall 5) enheter. */ /* Nu kommer vi att fortsätta att skapa strukturen för vår 2D-vektor genom att tilldela värdet på rader och kolumner genom en kapslad för-loop. */ for(int i = 0; i { /* Deklarerar storleken på kolumnen. */ int col = kolumn[i]; /* På den 43:e raden deklarerar vi den i:te raden till storleken på kolumnen. Vi skapar en normal vektor med kapacitet 'col' som i varje iteration av for-slingan kommer att definiera värdena inuti varje rad */vec[i] = vektor (kol); for(int j = 0; j { vec[i][j] = j + 1; } } /* Vi använder nu äntligen en enkel kapslad for-loop för att skriva ut 2D-vektorn som vi precis skapade ovan. */ for(int i = 0; i { för (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Produktion

1 2 3 4 5 6 7 8 9>

Tidskomplexitet: O(N*N)

Hjälputrymme: O(N*N)

Ett annat sätt att komma åt vektorelementen:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* C++-kod för att demonstrera en 2D-vektor med element(vektorer) inuti den. */div>
class='preprocessor'>#include div>
class='preprocessor'>#include div>
class='sökord fet'>using>namespace>std; div>
class='odefinierade utrymmen'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='undefined spaces'>>/* Nedan initialiserar vi en 2D-vektor som heter 'vect' på rad 12 och sedan deklarerar vi värdena på rad 14, 15 respektive 16. */div>
class='odefinierade utrymmen'> div>
class='undefined spaces'>>vectorclass='color1 bold'>intclass='plain'>>> vect div>
class='odefinierade utrymmen'>>{ div>
class='undefined spaces'>>{1, 2, 3}, div>
class='undefined spaces'>>{4, 5, 6}, div>
class='undefined spaces'>>{7, 8, 9} div>
class='odefinierade utrymmen'>>}; div>
class='odefinierade utrymmen'> div>
class='undefined spaces'>>/* Nu skriver vi ut värdena som vi just deklarerat på raderna 14, 15 och 16 med hjälp av en enkel kapslad för-loop med hjälp av iterator. */div>
class='odefinierade utrymmen'> div>
class='undefined spaces'>>/* vektor vect Vi kan dela upp denna deklaration i två delar, vilket hjälper oss att förstå nedanstående begrepp. 1. vect är en 2D-vektor som består av flera element av typen vektor. 2. vektor är en 1D-vektor som består av flera int-data. Så vi kan använda iterator som tillhandahålls av STL istället för i,j variabel som används i för loop. Det kan minska felet som kan hända med i, j operationer(i++, j++) I koden nedan använder vi iterator för att komma åt vektorelementen. 1. Vi får vect1D-vektorer av typen vektor från 2D-vektorn vect. 2. Vi får int-element till x från vektorn vect 1D vektor. */div>
class='odefinierade utrymmen'> div>
class='odefinierade utrymmen'>>för>(vektorintclass='plain'>> vect1D : vect) div>
class='odefinierade utrymmen'>>{ div>
class='undefined spaces'>>for>(class='color1 bold'>int>x : vect1D) div>
class='odefinierade utrymmen'>>{ div>
class='odefinierade utrymmen'>>cout<< x <<>' 'class='plain'>; div>
class='undefined spaces'>>} div>
class='odefinierade utrymmen'>>cout<< endl; div>
class='undefined spaces'>>} div>
class='odefinierade utrymmen'> div>
class='undefined spaces'>>return>0; div>
class='plain'>} div>div>div>>

>

>

Produktion

1 2 3 4 5 6 7 8 9>

Tidskomplexitet: O(N*N)

Hjälputrymme: O(N*N)

Liksom Javas taggiga arrayer kan varje element i en 2D-vektor innehålla ett annat antal värden.

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 ett med 2 värden i sig. */ {1, 2}, /* Element två med 3 värden i. */ {4, 5, 6}, /* Element tre med 4 värden i. */ {7, 8, 9, 10} }; /* Nu skriver vi ut vektorn som vi just definierat med en enkel kapslad för-loop. */ för (int i = 0; i { för (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Produktion

1 2 4 5 6 7 8 9 10>

Träningsproblem: Definiera 2D-vektorn med olika storlekar på kolumner.
Exempel:

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 behandlas ofta som en matris med rader och kolumner inuti. Under huven är de faktiskt delar av 2D-vektorn.
Vi deklarerar först en heltalsvariabel med namnet rad och sedan en array med namnet kolumn som kommer att hålla värdet på storleken på varje rad.

Efter det fortsätter vi att initialisera minnet för varje rad med storleken på kolumnen.

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

rad autocad kommando
>

>

Produktion

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

Ett annat tillvägagångssätt
Antag att vi vill initiera en 2D-vektor av n rader och m kolumner, med värdet 0.

C++




>

>

Produktion

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

Tidskomplexitet: PÅ M)

Hjälputrymme: PÅ M)

Ännu ett tillvägagångssätt:
Anta att vi vill skapa en 2D-vektor av n rader och m kolumner och ingångsvärden.

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

>

>

Produktion

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

Tidskomplexitet: PÅ M)

Hjälputrymme: PÅ M)

Vi hoppas att du lämnar den här artikeln med en bättre förståelse för 2D-vektorer och att du nu är säker nog att använda dem på egen hand.