vector < vector <тип даних > >
А щоб вказати кількість векторів у векторі, нам знадобиться — метод resize().
vector < vector <int> >vec;
vec.resize(10); // десять векторів
Але є ще один спосіб додавання векторів у вектор. Для цього способу ми будемо використовувати функцію push_back()
vec.push_back(vector <int>());
В аргументах функції push_back() знаходиться — ім’я контейнера, який ми хочемо додати. У нашому випадку — vector.
Далі йде тип контейнера — <тип>. І все закінчується відкриваючою та закриваючою дужкою ().
Для двовимірного вектора теж можна вказати значення ще під час ініціалізації:
vector <vector <int> > ivector = {{1, 4, 7},{2, 5, 8},{3, 6, 9}};
/*******************************************************************************
Вектори
********************/
#include <iostream>
#include <vector> // Для роботи з векторами
using namespace std;
int main() {
int n, m; // Змінні для розмірів вектора
cout << "Введіть розмір вектора (рядки стовпці): " << endl;
cin >> n >> m; // Введення розмірів
// Оголошення двовимірного вектора розміром n x m
vector<vector<int>> a(n, vector<int>(m));
// Заповнення вектора значеннями
for (int i = 0; i < n; i++) { // Цикл по рядкам
for (int j = 0; j < m; j++) { // Цикл по стовпцям
cin >> a[i][j]; // Введення значення
}
}
cout << "Двовимірний масив:" << endl;
// Виведення вектора
for (int i = 0; i < n; i++) { // Цикл по рядкам
for (int j = 0; j < m; j++) { // Цикл по стовпцям
cout << a[i][j] << " "; // Виведення значення
}
cout << endl; // Перехід на новий рядок
}
return 0;
}
Результат:

/*******************************
**Вектори**
*******************************/
#include <iostream>
#include <vector> // Для роботи з векторами
using namespace std;
int main() {
// Ініціалізація двовимірного вектора
vector<vector<int>> a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
cout << "Двовимірний масив:" << endl;
// Цикл по рядкам вектора
for (int i = 0; i < a.size(); i++) {
// Цикл по елементам рядка
for (int j = 0; j < a[i].size(); j++) {
cout << a[i][j] << " "; // Виведення елементів i-того рядка
}
cout << endl; // Перехід на новий рядок
}
return 0;
}
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <vector>
using namespace std;
// Оголошення функцій
void fillRandom(vector<vector<int>>& vec, int m, int n, int a, int b);
void Printmass(vector<vector<int>>& vec);
// Головна функція
int main() {
int m, n, first_value, last_value;
setlocale(0, "UKR"); // Змінено на українську локаль
cout << "Введіть діапазон значень масиву:" << endl;
cin >> first_value >> last_value;
srand(time(0)); // Виправлено grand на srand
cout << "Введіть розмір матриці:" << endl;
cin >> m >> n;
// Створення вектора векторів
vector<vector<int>> vec;
// Виклик функції fillRandom
fillRandom(vec, m, n, first_value, last_value);
// Виклик функції Printmass
Printmass(vec);
return 0;
}
// Функція, що заповнює вектор векторів випадковими числами
// Параметри: vec - посилання на вектор векторів, m - кількість рядків, n - кількість стовпців,
// a - нижня межа діапазону, b - верхня межа діапазону
void fillRandom(vector<vector<int>>& vec, int m, int n, int a, int b) {
// Ініціалізація генератора випадкових чисел
srand(time(NULL));
// Зміна розміру вектора векторів
vec.resize(m);
// Цикл по рядкам вектора векторів
for (int i = 0; i < m; i++) {
// Зміна розміру внутрішнього вектора
vec[i].resize(n);
// Цикл по стовпцям внутрішнього вектора
for (int j = 0; j < n; j++) {
// Генерація випадкового числа у заданому діапазоні
vec[i][j] = a + rand() % (b - a + 1);
}
}
}
// Функція для виведення масиву
void Printmass(vector<vector<int>>& vec) {
cout << "Друк масиву:" << endl;
// Цикл по рядкам вектора векторів
for (int i = 0; i < vec.size(); i++) {
// Цикл по стовпцям внутрішнього вектора
for (int j = 0; j < vec[i].size(); j++) {
// Виведення елементу вектора
cout << vec[i][j] << " ";
}
// Перехід на новий рядок
cout << endl;
}
}
Результат:

#include <iostream>
#include <random>
#include <vector>
using namespace std;
void RandMatrix(int, int, int, vector<vector<int>>& matrix);
void printVector(vector<vector<int>> const &matrix);
int main() {
int n, m, x, y;
cout << "Введіть розмірність матриці: ";
cin >> n;
cout << "Введіть діапазон значень: ";
cin >> x >> y;
// значення за замовчуванням для заповнення елементів вектора
int default_value = 1;
// ініціалізуємо вектор цілих чисел заданим значенням за замовчуванням
vector<int> v(n, default_value);
// Використовуємо вектор для ініціалізації двовимірного вектора
vector<vector<int>> matrix(n, v); // Виправлено m на n
RandMatrix(x, y, n, matrix);
// Виводимо двовимірний вектор
printVector(matrix);
return 0;
}
// Функція для генерації випадкової матриці
void RandMatrix(int a, int b, int n, vector<vector<int>> &matrix) {
random_device random_device;
mt19937 generator(random_device());
uniform_int_distribution<> distribution(a, b);
for (int i = 0; i < n; i++) {
// Створення вектора цілих чисел з випадковими значеннями
vector<int> v;
for (int j = 0; j < n; j++) {
v.push_back(distribution(generator));
}
matrix.push_back(v);
}
}
// Функція для виведення матриці
void printVector(vector<vector<int>> const &matrix) {
for (vector<int> row: matrix) {
for (int val: row) {
cout << val << " ";
}
cout << endl;
}
}
Результат:

Що робить програма
#include <iostream>
#include <vector>
using namespace std;
// Функція для множення двох матриць
vector<vector<int>> multiplyMatrices(const vector<vector<int>>& A, const vector<vector<int>>& B) {
// Кількість рядків і стовпців у A і B
int m = A.size(); // рядки A
int n = A[0].size(); // стовпці A
int p = B[0].size(); // стовпці B
// Результат: матриця C розміром m x p, заповнена нулями
vector<vector<int>> C(m, vector<int>(p, 0));
// Перемноження матриць
for (int i = 0; i < m; ++i) { // по рядках A
for (int j = 0; j < p; ++j) { // по стовпцях B
for (int k = 0; k < n; ++k) { // по спільному виміру
C[i][j] += A[i][k] * B[k][j];
}
}
}
return C;
}
// Допоміжна функція для друку матриці
void printMatrix(const vector<vector<int>>& M) {
for (const auto& row : M) {
for (int val : row) {
cout << val << " ";
}
cout << endl;
}
}
int main() {
// Задаємо приклад двох матриць. А розміром 2x3
vector<vector<int>> A = {
{1, 2, 3},
{4, 5, 6}
};
// В розміром 3x2
vector<vector<int>> B = {
{7, 8},
{9, 10},
{11, 12}
};
// Перевірка розмірності для множення
if (A[0].size() != B.size()) {
cout << "Помилка: неможливо перемножити ці матриці (невідповідність розмірів)." << endl;
return 1;
}
// Виклик функції для множення
vector<vector<int>> C = multiplyMatrices(A, B);
// Виведення результату
cout << "Матриця A:" << endl; printMatrix(A);
cout << "Матриця B:" << endl; printMatrix(B);
cout << "A * B = C:" << endl; printMatrix(C);
return 0;
}
// Допоміжна функція для друку матриці
void printMatrix(const vector<vector<int>>& M) {
for (const auto& row : M) {
for (int val : row) {
cout << val << " ";
}
cout << endl;
}
}
int main() {
// Задаємо приклад двох матриць. А розміром 2x3
vector<vector<int>> A = {
{1, 2, 3},
{4, 5, 6}
};
// В розміром 3x2
vector<vector<int>> B = {
{7, 8},
{9, 10},
{11, 12}
};
// Перевірка розмірності для множення
if (A[0].size() != B.size()) {
cout << "Помилка: неможливо перемножити ці матриці (невідповідність розмірів)." << endl;
return 1;
}
// Виклик функції для множення
vector<vector<int>> C = multiplyMatrices(A, B);
// Виведення результату
cout << "Матриця A:" << endl; printMatrix(A);
cout << "Матриця B:" << endl; printMatrix(B);
cout << "A * B = C:" << endl; printMatrix(C);
return 0;
}
Результат:

vector<vector<int>> — це вектор векторів, зручний для роботи з матрицями.
vector<vector<int>> A = {
{1, 2, 3},
{4, 5, 6}
};
— означає матрицю 2*3.
Зовнішній цикл — по рядках A.
Середній цикл — по стовпцях B.
Внутрішній цикл — по спільному індексу (для скалярного добутку рядка і стовпця).