logo

Двовимірний вектор у C++ із визначеним користувачем розміром

Двовимірний вектор — це a вектор вектора. Подібно до 2D-масивів, ми можемо оголошувати та призначати значення 2D-вектору!

Припускаючи, що ви знайомі з нормальним вектором у C++, за допомогою прикладу ми продемонструємо, чим двовимірний вектор відрізняється від нормального вектора нижче:

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 { /* Перший елемент із 2 значеннями в ньому. */ {1, 2}, /* Другий елемент із 3 значеннями в ньому. */ {4, 5, 6}, /* Третій елемент із 4 значеннями. */ {7, 8, 9, 10} }; /* Тепер ми друкуємо вектор, який щойно визначили за допомогою простого вкладеного циклу for. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

У двовимірному векторі кожен елемент є вектором.

Часова складність: О(1)

Допоміжний простір: О(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(рядок); /* У рядку 21 ми створили 2D-вектор і призначили йому ємність 'ряду' (у цьому випадку 5) одиниць. */ /* Тепер ми приступимо до створення структури нашого 2D-вектора, призначаючи значення рядків і стовпців за допомогою вкладеного циклу for. */ for(int i = 0; i { /* Оголошення розміру стовпця. */ int col = column[i]; /* У 43-му рядку оголошуємо i-й рядок до розміру стовпця. Ми створюємо нормальний вектор ємності 'col', який у кожній ітерації циклу for визначатиме значення всередині кожного рядка */ vec[i] = vector (col); for(int j = 0; j { vec[i][j] = j + 1; } } /* Тепер ми нарешті використовуємо простий вкладений цикл for, щоб надрукувати 2D-вектор, який ми щойно створили вище. */ for(int i = 0; { for (int j = 0; j { cout<< vec[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Вихід

1 2 3 4 5 6 7 8 9>

Часова складність: O(N*N)

Допоміжний простір: O(N*N)

Інший підхід до доступу до векторних елементів:

C++




<>div> id=>'highlighter_223295'> class>=>'syntaxhighlighter nogutter '>>'0'>>
class='comments'>/* Код C++ для демонстрації 2D-вектора з елементами (векторами) всередині нього. */div>
class='preprocessor'>#include div>
class='preprocessor'>#include div>
class='keyword bold'>using>namespace>std; div>
class='невизначені пробіли'> div>
class='color1 bold'>int>main() div>
class='plain'>{ div>
class='undefined spaces'>>/* Нижче ми ініціалізуємо 2D-вектор під назвою 'vect' у рядку 12, а потім оголошуємо значення в рядках 14, 15 і 16 відповідно. */div>
class='невизначені пробіли'> div>
class='невизначені пробіли'>>vectorclass='color1 bold'>intclass='plain'>>> vect div>
class='невизначені пробіли'>>{ div>
class='невизначені пробіли'>>{1, 2, 3}, div>
class='невизначені пробіли'>>{4, 5, 6}, div>
class='невизначені пробіли'>>{7, 8, 9} div>
class='невизначені пробіли'>>}; div>
class='невизначені пробіли'> div>
class='undefined spaces'>>/* Тепер ми друкуємо значення, які щойно оголосили в рядках 14, 15 і 16, використовуючи простий вкладений цикл for за допомогою ітератора. */div>
class='невизначені пробіли'> div>
class='undefined spaces'>>/* vector vect Ми можемо розділити цю декларацію на дві частини, що допоможе нам зрозуміти наведені нижче концепції. 1. vect — це двовимірний вектор, що складається з кількох елементів типу vector. 2. вектор — це одновимірний вектор, що складається з кількох даних int. Тому ми можемо використовувати ітератор, наданий STL, замість змінної i,j, що використовується в циклі for. Це може зменшити помилку, яка може трапитися з операціями i, j(i++, j++). У наведеному нижче коді ми використовуємо ітератор для доступу до векторних елементів. 1. Ми отримуємо vect1D вектори типу vector з 2D вектора vect. 2. Ми отримуємо int елементів до x з вектора vect 1D vector. */div>
class='невизначені пробіли'> div>
class='невизначені пробіли'>>для>(векторintclass='plain'>> vect1D : vect) div>
class='невизначені пробіли'>>{ div>
class='невизначені пробіли'>>for>(class='color1 bold'>int>x : vect1D) div>
class='невизначені пробіли'>>{ div>
class='невизначені пробіли'>>cout<< x <<>' 'class='plain'>; div>
class='невизначені пробіли'>>} div>
class='невизначені пробіли'>>cout<< endl; div>
class='невизначені пробіли'>>} div>
class='невизначені пробіли'> div>
class='невизначені пробіли'>>повернення>0; div>
class='plain'>} div>div>div>>

>

>

Вихід

1 2 3 4 5 6 7 8 9>

Часова складність: O(N*N)

Допоміжний простір: O(N*N)

Подібно до зубчастих масивів Java, кожен елемент 2D-вектора може містити різну кількість значень.

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 { /* Перший елемент із 2 значеннями в ньому. */ {1, 2}, /* Другий елемент із 3 значеннями в ньому. */ {4, 5, 6}, /* Третій елемент із 4 значеннями. */ {7, 8, 9, 10} }; /* Тепер ми друкуємо вектор, який щойно визначили за допомогою простого вкладеного циклу for. */ for (int i = 0; i { for (int j = 0; j { cout<< vect[i][j] << ' '; } cout << endl; } return 0; }>

>

>

Вихід

1 2 4 5 6 7 8 9 10>

Проблема вправи: Визначте 2D-вектор із різними розмірами стовпців.
приклади:

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-вектора.
Спочатку ми оголошуємо цілочисельну змінну з іменем row, а потім масив з іменем column, який буде містити значення розміру кожного рядка.

Після цього ми переходимо до ініціалізації пам'яті кожного рядка розміром стовпця.

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 , вектор (м)); 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; }>

конвертувати рядок у json java
>

>

Вихід

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

Інший підхід
Припустімо, ми хочемо ініціалізувати двовимірний вектор п ряди і м стовпці зі значенням 0.

C++




>

>

Вихід

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

Часова складність: O(N*M)

Допоміжний простір: O(N*M)

Ще один підхід:
Припустімо, ми хочемо створити двовимірний вектор п ряди і м стовпці та вхідні значення.

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 , вектор (м)); 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; }>

>

>

Вихід

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

Часова складність: O(N*M)

Допоміжний простір: O(N*M)

Ми сподіваємося, що ви залишите цю статтю з кращим розумінням двовимірних векторів і тепер достатньо впевнені, щоб застосовувати їх самостійно.