Related Articles
2D Vector In C++ With User Defined Size
• Difficulty Level : Easy
• Last Updated : 03 Mar, 2021

A 2D vector is a vector of the vector. Like 2D arrays, we can declare and assign values to a 2D vector!
Assuming you are familiar with a normal vector in C++, with the help of an example we demonstrate how a 2D vector differs from a normal vector below:

## C++

 `/* Vectors belong to a C++ library``   ``called STL so we need to import``   ``it first! */``#include ``using` `namespace` `std;``int` `main()``{``    ``/*``    ``In the case of a normal vector we initialize it as:``    ` `    ``1. vector variable_name``    ` `    ``Now in the case of a 2D vector all we do is create``    ``a vector of datatype vector.``    ` `    ``We simply replace "datatype" with "vector":``    ` `    ``1. vector> variable_name``    ` `    ``That's literally it! We just created a 2D vector!``    ``On line 23 below we declare an actual 2D vector``    ``named "vect".``    ``*/``    ` `    ``vector> vect;` `    ``return` `0;``}`

In a 2D vector, every element is a vector.

## C++

 `/* C++ code to demonstrate a 2D vector``   ``with elements(vectors) inside it. */``#include ``#include ``using` `namespace` `std;` `int` `main()``{``    ``/*``    ``Below we initialize a 2D vector``    ``named "vect" on line 12 and then``    ``we declare the values on``    ``line 14, 15 and 16 respectively.``    ``*/``    ` `    ``vector> vect``    ``{``        ``{1, 2, 3},``        ``{4, 5, 6},``        ``{7, 8, 9}``    ``};``    ` `    ``/*``    ``Now we print the values that``    ``we just declared on lines``    ``14, 15 and 16 using a simple``    ``nested for loop.``    ``*/``    ` `    ``for` `(``int` `i = 0; i < vect.size(); i++)``    ``{``        ``for` `(``int` `j = 0; j < vect[i].size(); j++)``        ``{``            ``cout << vect[i][j] << ``" "``;``        ``}   ``        ``cout << endl;``    ``}` `    ``return` `0;``}`

Output :

```1 2 3
4 5 6
7 8 9 ```

Like Java’s jagged arrays, each element of a 2D vector can contain a different number of values.

## 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.``    ``*/``    ` `    ``vector> vect``    ``{``        ``/* Element one with 2 values in it. */``        ``{1, 2},``      ` `        ``/* Element two with 3 values in it. */``        ``{4, 5, 6},``      ` `         ``/* Element three with 4 values in it. */``        ``{7, 8, 9, 10}``    ``};` `    ``/*``    ``Now we print the vector that we``    ``just defined using a simple``    ``nested for loop.``    ``*/``    ` `    ``for` `(``int` `i = 0; i < vect.size(); i++)``    ``{``        ``for` `(``int` `j = 0; j < vect[i].size(); j++)``        ``{``            ``cout << vect[i][j] << ``" "``;``        ``}   ``        ``cout << endl;``    ``}``    ``return` `0;``}   `

Output :

```1 2
4 5 6
7 8 9 10 ```

Exercise Problem: Define the 2D vector with different sizes of columns.
Examples:

```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 vectors are often treated as a matrix with “rows” and “columns” inside it. Under the hood they are actually elements of the 2D vector.
We first declare an integer variable named “row” and then an array named “column” which is going to hold the value of the size of each row.

After that we proceed to initialize the memory of every row by the size of column.

## 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` `colom[] = {5, 3, 4, 2, 1};` `    ``/*``    ``We now create a vector of vector with size``    ``equal to row.``    ``*/``    ` `    ``vector> vec(row);``    ``/*``    ``On line 21 we created a 2D vector and assigned``    ``it a capacity of "row"(in this case 5) units.``    ``*/``    ` `    ``/*``    ``Now we will proceed to create the structure of``    ``our 2D vector by assigning the value of rows and``    ``columns through a nested for loop.``    ``*/` `    ``for``(``int` `i = 0; i < row; i++)``    ``{  ``        ``/* Declaring the size of the column. */``        ``int` `col = colom[i];` `        ``/*``        ``On the 43rd line we declare 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] = j + 1;``        ``}   ``    ``}``    ` `    ``/*``    ``We now finally use a simple nested for loop``    ``to print 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;``}`

Output:

```1 2 3 4 5
1 2 3
1 2 3 4
1 2
1```

Another Approach
Suppose we want to initialize a 2D vector of “n” rows and “m” columns, with a value 0.

## C++

 `// CPP program``#include ``#include ``using` `namespace` `std;``int` `main()``{``    ``int` `n = 3;``    ``int` `m = 4;` `    ``/*``    ``We create a 2D vector containing "n"``    ``elements each having the value "vector (m, 0)".``    ``"vector (m, 0)" means a vector having "m"``    ``elements each of value "0".``    ``Here these elements are vectors.``    ``*/``    ``vector> vec( n , vector<``int``> (m, 0));` `    ``for``(``int` `i = 0; i < n; i++)``    ``{``        ``for``(``int` `j = 0; j < m; j++)``        ``{``            ``cout << vec[i][j] << ``" "``;``        ``}``        ``cout<< endl;``    ``}``    ` `    ``return` `0;``}`

Output:

```0 0 0 0
0 0 0 0
0 0 0 0```

Yet Another Approach:
Suppose we want to create a 2D vector of “n” rows and “m” columns and input values.

## 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".``    ``*/``    ``vector> vec( n , vector<``int``> (m));` `    ``for``(``int` `i = 0; i < n; i++)``    ``{``        ``for``(``int` `j = 0; j < m; j++)``        ``{``            ``vec[i][j] = j + i + 1;``        ``}``    ``}` `    ``for``(``int` `i = 0; i < n; i++)``    ``{``        ``for``(``int` `j = 0; j < m; j++)``        ``{``            ``cout << vec[i][j] << ``" "``;``        ``}``        ``cout << endl;``    ``}``    ` `   ``return` `0;``}`

Output:

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

We hope you that you leave this article with a better understanding of 2D vectors and are now confident enough to apply them on your own.

This article is contributed by Amit Verma. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Want to learn from the best curated videos and practice problems, check out the C++ Foundation Course for Basic to Advanced C++ and C++ STL Course for foundation plus STL.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.
My Personal Notes arrow_drop_up