# 2D Vectors in C++: Declaration, Operations & Traversal

We all are familiar with arrays in C++, but today in this article we are going to look at the array but with dynamic properties like 2D Vector. Yes! you already know what we are talking about. So, vectors are nothing but arrays with dynamic properties, and let's quickly dive into them.

### What is a Vector?

Vectors are dynamic arrays, whenever an element is inserted or deleted they can resize themselves automatically. Elements are stored at contiguous storage therefore iterators can be used to access and traverse.

Given below is the syntax to declare a 1D vector in C++ :

Syntax

`vector<datatype> variable_name;`

### Basic Operations in Vectors?

Let us check different operations on vectors that can be performed which are provided by the class vector.

Some basic operations are :

 Operation Description push_back() function It adds a single element at the end of the vector. pop_back() It removes a single element from the end of the vector. at() It is used to access the elements using indexes. size() It is used to return a total number of elements present in the vector. empty() It is used to check whether the vector is empty or not.

### Example:

```// Welcome to favtutor
#include<iostream>
#include<vector>  // provided by STL
using namespace std;

int main()
{

// Method1 : Initializer List
vector<int> v1 = {10, 20, 30, 40, 50};

// Method 2 : Uniform Initialization
vector<int> v2{60, 70, 80, 90, 100};

// Method 3
vector<int> v3(5, 7); // five times 7

cout << "vector1 : ";

// for loop
for (int i = 0; i < 5; i++)
{
cout << v1[i] << "  ";
}

cout << "\nvector2 : ";

// ranged loop
for (const int &i : v2)
{
cout << i << "  ";
}

cout << "\nvector3 : ";

// ranged loop
for (int i : v3)
{
cout << i << "  ";
}

return 0;
}
```

Output:

```vector1 : 10  20  30  40  50
vector2 : 60  70  80  90  100
vector3 : 7  7  7  7  7```

## What is a 2D vector?

Vector of Vectors is a 2D vector, it is nothing but a dynamic array in C++ means it has the ability to resize itself automatically, whenever we add or remove elements in it. Like a 2D array, it consists of rows and columns where each row is a different type of vector.

In order to use vectors in our program, we must include the vector header file provided by the Standard Template Library :

#include<vector>

Also, to include all kinds of Standard Template Libraries (STL) at once, we can use :

#include<bits/stdc++.h>

### How to declare a 2D vector in C++?

Given below is the syntax to declare a 2D vector in C++ :

Syntax :

`vector<vector> vec;`

### How to Initialize a 2D vector in C++?

There are various ways to initialize a 2D vector in C++.

Method 01) Using the above syntax.

```/* Welcome to favTutor */
#include<vector>
using namespace std;
int main()
{
// Normal 2D vector initialization
vector<vector<int>> vect;

return 0;
}
```

Method 02) Initializing a 2D vector with vectors as elements inside it.

```// Welcome to favTutor
// 2D vector with elements(vectors) inside it.

#include<vector>
#include<iostream>
using namespace std;

int main()
{
// Initializing a 2D vector with vectors as elements inside it.
vector<vector<int>> v{
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};

// prinitng the above 2D vector
for (int i = 0; i < v.size(); i++)
{
for (int j = 0; j < v[i].size(); j++)
{
cout << v[i][j] << " ";
}
cout << endl;
}

return 0;
}
```

Method 03) Initializing a 2D vector where each row has values associated with them as defined by the user.

```/*
Welcome to favTutor
A 2D vector where each row has values associated
with them as defined by the user.
*/

#include<vector>
#include<iostream>
using namespace std;
int main()
{

/* Number of rows our vector will have */
int row = 5;

/* values associated with each vector elements */
int column[] = {5, 3, 4, 2, 1};

/*
creating a 2D vector with size 'row' units.
*/

vector<vector<int>> vec(row);

/*
Assigning the values of rows and
columns through a nested for loop,
in our 2D vector.
*/

for (int i = 0; i < row; i++)
{
/* Declaring the size of the column. */
int col = column[i];

/*
We have the i-th row to the size of the column.
We create a normal vector of capacity "col" which
in every iteration of the for loop will define the
values inside of each row.
*/
vec[i] = vector<int>(col);
for (int j = 0; j < col; j++)
{
vec[i][j] = 2;
}
}

/*
Printing the 2D vector that we just created above.
*/

for (int i = 0; i < row; i++)
{
for (int j = 0; j < vec[i].size(); j++)
{
cout << vec[i][j] << " ";
}
cout << endl;
}
return 0;
}
```

Method 04) Initializing a 2D vector of size 'n' rows and 'm' columns with all element values as 1.

```// Welcome to favTutor
#include<vector>
#include<iostream>
using namespace std;
int main()
{
int n = 5;
int m = 3;

/*
We create a 2D vector having "n"
rows each having the value "vector (m, 1)".
"vector (m, 1)" declares a vector having "m"
elements each of value "1".
*/
vector<vector<int>> vec(n, vector<int>(m, 1));

for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cout << vec[i][j] << " ";
}
cout << endl;
}

return 0;
}
```

## Some Operations On 2D Vectors

### Insertion: Using push_back() function

Example 1:

Suppose we have a vector of vectors v1 and I want to push vector v2 = {4,5,6} inside it. Then,

v1.push_back(v2);

(This will push the v2 vector into the vector of vectors v1).

Now v1 becomes : v1 = {{4,5,6}}.

Example 2:

Now, I want to push vector v3 in the above-created vector of vector v1. Then, (v3 = {1,2,3})

v1.push_back(v3);

This will result in :

v1 = {{4,5,6},{1,2,3}}

Below is the C++ program to demonstrate the above :

```// Welcome to favTutor
// C++ program for inserting a vector
// into a vector of vectors

#include<vector>
#include<iostream>
using namespace std;

// Defining the rows and columns of
// vector of vectors
#define ROW 4
#define COL 5

int main()
{
// Initialization
vector<vector<int>> vec;
int num = 1;

// 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 += 1;
}

// Pushing above created 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;
}
```

### Deletion or Removal: Using pop_back() function

Below is the C++ program to show how to perform deletion in a 2D vector using the pop_back() function:

```// Welcome to favTutor
// Deletion program in C++ in a 2D vector

#include<vector>
#include<iostream>
using namespace std;

int main()
{
// Initialization
vector<vector<int>> vec{{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};

// Removing elements from the
// last row of the vector
vec.pop_back();

// Removing elements from the
// second last row of the vector
vec.pop_back();
vec.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;
}
```

### How to traverse in a 2D vector?

Below is the C++ program to show how to traverse in a 2D vector using iterators :

```// Welcome to favTutor
// C++ code to traverse in a 2D vector

#include<vector>
#include<iostream>
using namespace std;

int main()
{
// Initializing
vector<vector<int> > vec{ { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };

// Traversing
for (int i = 0; i < 3; i++) {
for (
auto it = vec[i].begin();
it != vec[i].end(); it++)
cout << *it << " ";
cout << endl;
}

return 0;
}```

## Conclusion

Problems related to matrices, graphs, and other two-dimensional objects involve using 2D vectors to the great extent. So it is very crucial to have a deep understanding of how to declare, initialize, traverse, insert and remove elements in or from a 2D vector.

I hope this article helped you to understand 2D vectors in C++ step by step. Keep Learning!

### FavTutor - 24x7 Live Coding Help from Expert Tutors! 