Вектор векторов в C ++ STL с примерами

Опубликовано: 29 Декабря, 2021

Предварительное условие: векторы в C ++ STL

Векторы известны как динамические массивы с возможностью автоматического изменения размера при вставке или удалении элемента, а их хранение автоматически обрабатывается контейнером.

Вектор векторов - это двумерный вектор с переменным количеством строк, где каждая строка является вектором. Каждый индекс вектора хранит вектор, по которому можно пройти и получить к нему доступ с помощью итераторов. Он похож на массив векторов, но с динамическими свойствами.

Синтаксис:

 vector <vector <data_type>> vec;

Пример:

vector<vector<int>> vec{ { 1, 2, 3 }, 
                         { 4, 5, 6 }, 
                         { 7, 8, 9, 4 } }; 
where vec is the vector of vectors with different
      number of elements in different rows


Вставка векторов в вектор

Элементы могут быть вставлены в вектор с помощью функции push_back () C ++ STL.

Пример ниже демонстрирует операцию вставки в вектор векторов. Код создает двумерный вектор с помощью функции push_back (), а затем отображает матрицу.

Синтаксис:

 vector_name.push_back (значение)

где значение относится к элементу
      быть добавленным в конец вектора

Пример 1:

v2 = {1, 2, 3}
v1.push_back (v2);

Эта функция помещает вектор v2 в вектор векторов v1. Следовательно, v1 становится {{1, 2, 3}}.

Пример 2:

v2 = {4, 5, 6}
v1.push_back(v2);

Эта функция вставляет вектор v2 в существующий вектор векторов v1, и v1 становится v1 = {{1, 2, 3}, {4, 5, 6}}

Ниже приведен пример, демонстрирующий вставку в вектор векторов.

// C++ program to demonstrate insertion
// into a vector of vectors
#include <iostream>
#include <vector>
using namespace std;
// Defining the rows and columns of
// vector of vectors
#define ROW 4
#define COL 5
int main()
{
// Initializing the vector of vectors
vector<vector< int > > vec;
// Elements to insert in column
int num = 10;
// Inserting elements into vector
for ( int i = 0; i < ROW; i++) {
// Vector to store column elements
vector< int > v1;
for ( int j = 0; j < COL; j++) {
v1.push_back(num);
num += 5;
}
// Pushing back above 1D vector
// to create the 2D vector
vec.push_back(v1);
}
// Displaying the 2D vector
for ( int i = 0; i < vec.size(); i++) {
for ( int j = 0; j < vec[i].size(); j++)
cout << vec[i][j] << " " ;
cout << endl;
}
return 0;
}
Выход:
10 15 20 25 30 
35 40 45 50 55 
60 65 70 75 80 
85 90 95 100 105


Удаление или удаление в векторе векторов

Элементы могут быть удалены из вектора векторов с помощью функции pop_back () C ++ STL.

Пример ниже демонстрирует операцию удаления в векторе векторов. Код удаляет элементы из 2D-вектора с помощью функции pop_back (), а затем отображает матрицу.
Синтаксис:

 имя_вектора [row_position] .pop_back ()

Пример 1. Пусть вектор векторов будет вектором v = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

v [2] .pop_back ()

Эта функция удаляет элемент 9 из последней строки вектора. Следовательно, v становится {{1, 2, 3}, {4, 5, 6}, {7, 8}}.

Пример 2:

v [1] .pop_back ()

Эта функция удаляет элемент 6 из последней второй вектор-строки. Следовательно, v становится {{1, 2, 3}, {4, 5}, {7, 8}}.

Ниже приведен пример, демонстрирующий удаление из вектора векторов.

// C++ program to demonstrate removal
// from a vector of vectors
#include <iostream>
#include <vector>
using namespace std;
// Driver Method
int main()
{
// Initializing 2D vector "vect" with
// sample values
vector<vector< int > > vec{ { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
// Removing elements from the
// last row of the vector
vec[2].pop_back();
vec[1].pop_back();
// Displaying the 2D vector
for ( int i = 0; i < 3; i++) {
for (
auto it = vec[i].begin();
it != vec[i].end(); it++)
cout << *it << " " ;
cout << endl;
}
return 0;
}
Выход:
1 2 3 
4 5 
7 8


Обход вектора векторов

Вектор векторов можно обойти с помощью итераторов в C ++. Следующий код демонстрирует обход 2D-вектора.

Синтаксис:

для i в [0, n)
{
    for (итератор it = v [i] .begin ();
         это! = v [я] .end (); это ++) 
   {
        // Операции, которые необходимо сделать
        // Например, чтобы напечатать
        печать (* это)
    }
}

Ниже приведен пример, демонстрирующий обход вектора векторов.

// C++ code to demonstrate traversal
// of a 2D vector
#include <iostream>
#include <vector>
using namespace std;
// Driver Method
int main()
{
// Initializing 2D vector "vect" with
// sample values
vector<vector< int > > vec{ { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
// Displaying the 2D vector
for ( int i = 0; i < 3; i++) {
for (
auto it = vec[i].begin();
it != vec[i].end(); it++)
cout << *it << " " ;
cout << endl;
}
return 0;
}
Выход:
1 2 3 
4 5 6 
7 8 9
Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
C++