logo

2D-vector in C++ met door de gebruiker gedefinieerde grootte

Een 2D-vector is a vector van de vector. Net als bij 2D-arrays kunnen we waarden declareren en toewijzen aan een 2D-vector!

Ervan uitgaande dat u bekend bent met een normaalvector in C++, laten we met behulp van een voorbeeld hieronder zien hoe een 2D-vector verschilt van een normaalvector:



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 met twee waarden erin. */ {1, 2}, /* Element twee met 3 waarden erin. */ {4, 5, 6}, /* Element drie met 4 waarden erin. */ {7, 8, 9, 10} }; /* Nu drukken we de vector af die we zojuist hebben gedefinieerd met behulp van een eenvoudige geneste for-lus. */ voor (int i = 0; i { voor (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

In een 2D-vector is elk element een vector.

Tijdcomplexiteit: O(1)

Hulpruimte: 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(rij); /* Op regel 21 hebben we een 2D-vector gemaakt en deze een capaciteit van 'rij' (in dit geval 5) eenheden toegewezen. */ /* Nu gaan we verder met het creëren van de structuur van onze 2D-vector door de waarde van rijen en kolommen toe te wijzen via een geneste for-lus. */ for(int i = 0; i { /* De grootte van de kolom declareren. */ int col = kolom[i]; /* Op de 43e regel declareren we de i-de rij tot de grootte van de kolom. We creëren een normale capaciteitsvector 'col' die in elke iteratie van de for-lus de waarden binnen elke rij zal definiëren */ vec[i] = vector (kol); for(int j = 0; j { vec[i][j] = j + 1; } } /* We gebruiken nu eindelijk een eenvoudige geneste for-lus om de 2D-vector af te drukken die we zojuist hierboven hebben gemaakt. */ for(int ik = 0; ik {voor (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Uitvoer

1 2 3 4 5 6 7 8 9>

Tijdcomplexiteit: O(N*N)

Hulpruimte: O(N*N)

Een andere benadering om toegang te krijgen tot de vectorelementen:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* C++-code om een ​​2D-vector te demonstreren met elementen(vectoren) erin. */div>
class='preprocessor'>#include div>
class='preprocessor'>#include div>
class='trefwoord vet'>met>naamruimte>std; div>
class='ongedefinieerde spaties'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='undefinieerde spaties'>>/* Hieronder initialiseren we een 2D-vector met de naam 'vect' op regel 12 en vervolgens declareren we de waarden op respectievelijk regel 14, 15 en 16. */div>
class='ongedefinieerde spaties'> div>
class='ongedefinieerde spaties'>>vectorclass='color1 bold'>intclass='plain'>>> vect div>
class='ongedefinieerde spaties'>>{ div>
class='ongedefinieerde spaties'>>{1, 2, 3}, div>
class='ongedefinieerde spaties'>>{4, 5, 6}, div>
class='ongedefinieerde spaties'>>{7, 8, 9} div>
class='ongedefinieerde spaties'>>}; div>
class='ongedefinieerde spaties'> div>
class='undefinieerde spaties'>>/* Nu drukken we de waarden af ​​die we zojuist op de regels 14, 15 en 16 hebben gedeclareerd met behulp van een eenvoudige geneste for-lus met behulp van de iterator. */div>
class='ongedefinieerde spaties'> div>
class='ongedefinieerde spaties'>>/* vector vect We kunnen deze declaratie in twee delen verdelen, wat ons zal helpen de onderstaande concepten te begrijpen. 1. vect is een 2D-vector die bestaat uit meerdere elementen van het type vector. 2. vector is een 1D-vector die bestaat uit meerdere int-gegevens. We kunnen dus de iterator van STL gebruiken in plaats van de i,j-variabele die in de for-lus wordt gebruikt. Het kan de fout verminderen die kan optreden bij i, j-bewerkingen (i++, j++). In de onderstaande code gebruiken we iterator om toegang te krijgen tot de vectorelementen. 1. We krijgen vect1D-vectoren van het type vector uit de 2D-vectorvect. 2. We krijgen int-elementen naar x uit de vector vect 1D-vector. */div>
class='ongedefinieerde spaties'> div>
class='ongedefinieerde spaties'>>voor>(vectorintclass='plain'>> vect1D: vect) div>
class='ongedefinieerde spaties'>>{ div>
class='ongedefinieerde spaties'>>for>(class='color1 bold'>int>x: vect1D) div>
class='ongedefinieerde spaties'>>{ div>
class='ongedefinieerde spaties'>>cout<< x <<>' 'klasse='gewoon'>; div>
class='ongedefinieerde spaties'>>} div>
class='ongedefinieerde spaties'>>cout<< endl; div>
class='ongedefinieerde spaties'>>} div>
class='ongedefinieerde spaties'> div>
class='ongedefinieerde spaties'>>return>0; div>
class='plain'>} div>div>div>>

>

>

Uitvoer

1 2 3 4 5 6 7 8 9>

Tijdcomplexiteit: O(N*N)

Hulpruimte: O(N*N)

Net als de gekartelde arrays van Java kan elk element van een 2D-vector een ander aantal waarden bevatten.

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 met twee waarden erin. */ {1, 2}, /* Element twee met 3 waarden erin. */ {4, 5, 6}, /* Element drie met 4 waarden erin. */ {7, 8, 9, 10} }; /* Nu drukken we de vector af die we zojuist hebben gedefinieerd met behulp van een eenvoudige geneste for-lus. */ voor (int i = 0; i { voor (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Uitvoer

1 2 4 5 6 7 8 9 10>

Oefeningsprobleem: Definieer de 2D-vector met kolommen van verschillende grootte.
Voorbeelden:

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-vectoren worden vaak behandeld als een matrix met rijen en kolommen erin. Onder de motorkap zijn het eigenlijk elementen van de 2D-vector.
We declareren eerst een integer-variabele met de naam rij en vervolgens een array met de naam kolom die de waarde van de grootte van elke rij zal bevatten.

Daarna gaan we verder met het initialiseren van het geheugen van elke rij op basis van de kolomgrootte.

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 , vector (M)); for(int i = 0; ik { for(int j = 0; j { vec[i][j] = j + i + 1; } } for(int i = 0; ik { for(int j = 0; j { uit<< vec[i][j] << ' '; } cout << endl; } return 0; }>

lezen uit een csv-bestand in Java
>

>

Uitvoer

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

Een andere aanpak
Stel dat we een 2D-vector willen initialiseren N rijen en M kolommen, met een waarde 0.

C++




>

>

Uitvoer

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

Tijdcomplexiteit: O(N*M)

Hulpruimte: O(N*M)

Nog een andere aanpak:
Stel dat we een 2D-vector willen maken van N rijen en M kolommen en invoerwaarden.

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 , vector (M)); for(int i = 0; ik { for(int j = 0; j { vec[i][j] = j + i + 1; } } for(int i = 0; ik { for(int j = 0; j { uit<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Uitvoer

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

Tijdcomplexiteit: O(N*M)

Hulpruimte: O(N*M)

We hopen dat u dit artikel verlaat met een beter begrip van 2D-vectoren en dat u nu voldoende zelfvertrouwen heeft om ze zelf toe te passen.