logo

Wektor 2D w C++ o rozmiarze zdefiniowanym przez użytkownika

Wektor 2D to a wektor wektora. Podobnie jak tablice 2D, możemy deklarować i przypisywać wartości do wektora 2D!

Zakładając, że znasz wektor normalny w C++, na poniższym przykładzie pokażemy, czym wektor 2D różni się od wektora normalnego:



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 pierwszy zawierający 2 wartości. */ {1, 2}, /* Drugi element zawierający 3 wartości. */ {4, 5, 6}, /* Element trzeci zawierający 4 wartości. */ {7, 8, 9, 10} }; /* Teraz drukujemy wektor, który właśnie zdefiniowaliśmy, używając prostej zagnieżdżonej pętli for. */ for (int i = 0; ja { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>



>

>

W wektorze 2D każdy element jest wektorem.

Złożoność czasowa: O(1)

Przestrzeń pomocnicza: 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(wiersz); /* W linii 21 stworzyliśmy wektor 2D i przypisaliśmy mu pojemność 'wiersza' (w tym przypadku 5) jednostek. */ /* Teraz przystąpimy do tworzenia struktury naszego wektora 2D, przypisując wartości wierszom i kolumnom za pomocą zagnieżdżonej pętli for. */ for(int i = 0; i { /* Deklaracja rozmiaru kolumny. */ int col = kolumna[i]; /* W 43. linii deklarujemy i-ty wiersz odpowiadający rozmiarowi kolumny. Tworzymy normalny wektor pojemności 'col', który w każdej iteracji pętli for będzie definiował wartości wewnątrz każdego wiersza */ vec[i] = wektor (przełęcz); for(int j = 0; j { vec[i][j] = j + 1; } } /* Teraz w końcu używamy prostej zagnieżdżonej pętli for do wydrukowania wektora 2D, który właśnie stworzyliśmy powyżej. */ for(int ja = 0; ja { dla (int j = 0; jot { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Wyjście

1 2 3 4 5 6 7 8 9>

Złożoność czasowa: O(N*N)

Przestrzeń pomocnicza: O(N*N)

Inne podejście do dostępu do elementów wektorowych:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* Kod C++ demonstrujący wektor 2D z elementami (wektorami) wewnątrz niego. */div>
class='preprocesor'>#include div>
class='preprocesor'>#include div>
class='słowo kluczowe pogrubione'>używanie>przestrzeni nazw>std; div>
class='niezdefiniowane spacje'> div>
class='kolor1 pogrubiony'>int>main() div>
class='zwykły'>{div>
class='undefiniowane spacje'>>/* Poniżej inicjujemy wektor 2D o nazwie 'vect' w linii 12, a następnie deklarujemy wartości odpowiednio w liniach 14, 15 i 16. */div>
class='niezdefiniowane spacje'> div>
class='niezdefiniowane spacje'>>vectorclass='kolor1 pogrubiony'>intclass='zwykły'>>> vect div>
class='niezdefiniowane spacje'>>{div>
class='niezdefiniowane spacje'>>{1, 2, 3}, div>
class='niezdefiniowane spacje'>>{4, 5, 6}, div>
class='niezdefiniowane spacje'>>{7, 8, 9} div>
class='niezdefiniowane spacje'>>}; div>
class='niezdefiniowane spacje'> div>
class='undefiniowane spacje'>>/* Teraz wypisujemy wartości, które właśnie zadeklarowaliśmy w liniach 14, 15 i 16, używając prostej zagnieżdżonej pętli for za pomocą iteratora. */div>
class='niezdefiniowane spacje'> div>
class='niezdefiniowane przestrzenie'>>/* wektor vect Możemy podzielić tę deklarację na dwie części, co pomoże nam zrozumieć poniższe pojęcia. 1. vect jest wektorem 2D składającym się z wielu elementów typu wektor. 2. wektor jest wektorem 1D składającym się z wielu danych typu int. Możemy więc użyć iteratora dostarczonego przez STL zamiast zmiennej i,j używanej w pętli for. Może zmniejszyć błąd, który może wystąpić podczas operacji i, j (i++, j++). W poniższym kodzie używamy iteratora, aby uzyskać dostęp do elementów wektorowych. 1. Otrzymujemy wektory vect1D typu wektor z wektora 2D vect. 2. Pobieramy elementy int do x z wektora vect 1D. */div>
class='niezdefiniowane spacje'> div>
class='niezdefiniowane spacje'>>dla>(vectorintclass='zwykły'>> vect1D: vect) div>
class='niezdefiniowane spacje'>>{div>
class='niezdefiniowane spacje'>>for>(class='kolor1 pogrubiony'>int>x : vect1D) div>
class='niezdefiniowane spacje'>>{div>
class='niezdefiniowane spacje'>>cout<< x <<>' 'class='zwykły'>; div>
class='niezdefiniowane spacje'>>} div>
class='niezdefiniowane spacje'>>cout<< endl; div>
class='niezdefiniowane spacje'>>} div>
class='niezdefiniowane spacje'> div>
class='niezdefiniowane spacje'>>return>0; div>
class='plain'>} div>div>div>>

>

>

Wyjście

1 2 3 4 5 6 7 8 9>

Złożoność czasowa: O(N*N)

Przestrzeń pomocnicza: O(N*N)

Podobnie jak tablice postrzępione w Javie, każdy element wektora 2D może zawierać inną liczbę wartości.

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 pierwszy zawierający 2 wartości. */ {1, 2}, /* Drugi element zawierający 3 wartości. */ {4, 5, 6}, /* Element trzeci zawierający 4 wartości. */ {7, 8, 9, 10} }; /* Teraz drukujemy wektor, który właśnie zdefiniowaliśmy, używając prostej zagnieżdżonej pętli for. */ for (int i = 0; ja { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Wyjście

1 2 4 5 6 7 8 9 10>

Problem z ćwiczeniami: Zdefiniuj wektor 2D z różnymi rozmiarami kolumn.
Przykłady:

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>

Wektory 2D są często traktowane jako macierz zawierająca wiersze i kolumny. Pod maską są to właściwie elementy wektora 2D.
Najpierw deklarujemy zmienną całkowitą o nazwie wiersz, a następnie tablicę o nazwie kolumna, która będzie przechowywać wartość rozmiaru każdego wiersza.

Następnie przystępujemy do inicjowania pamięci każdego wiersza według rozmiaru kolumny.

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

tworzenie instancji Java
>

>

Wyjście

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

Inne podejście
Załóżmy, że chcemy zainicjować wektor 2D N rzędy i M kolumny o wartości 0.

C++




>

>

Wyjście

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

Złożoność czasowa: O(N*M)

Przestrzeń pomocnicza: O(N*M)

Jeszcze inne podejście:
Załóżmy, że chcemy stworzyć wektor 2D N rzędy i M kolumny i wartości wejściowe.

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

>

>

Wyjście

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

Złożoność czasowa: O(N*M)

Przestrzeń pomocnicza: O(N*M)

Mamy nadzieję, że opuścisz ten artykuł z lepszym zrozumieniem wektorów 2D i będziesz teraz na tyle pewny, że będziesz mógł je zastosować samodzielnie.