2D Vector In C++ With User Defined Size - GeeksforGeeks

20 Oct, 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 <vector>using namespace std;int main(){    /*    In the case of a normal vector we initialize it as:         1. vector<datatype> 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<int>":         1. vector<vector<int>> 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<vector<int>> 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 <iostream>#include <vector>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<vector<int>> 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;}
1 2 3 
4 5 6 
7 8 9 
Another approach to access the vector elements:
C++
/* C++ code to demonstrate a 2D vector   with elements(vectors) inside it. */#include <iostream>#include <vector>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<vector<int>> 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 with the help of iterator.    */         /*    vector<vector<int>> vect    We can divide this declaration to two parts, which will    help us to understand the below concepts.         1. vect is a 2D vector consisting multiple elements of type vector<int>.    2. vector<int> is a 1D vector consisting of multiple int data.         So we can use iterator provided by STL instead of    i,j variable used in for loop. It can reduce the error which can    happen wrt to i, j operations(i++, j++)             In the below code we are using iterator to access the vector elements.    1. We are getting vect1D vectors of type vector<int> from the 2D vector vect.    2. We are getting int elements to x from the vector<int> vect 1D vector.         */         for (vector<int> vect1D : vect)    {        for (int x : vect1D)        {            cout << x << " ";        }           cout << endl;    }     return 0;}
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 whereeach of its elements is of different size.*/#include <iostream>#include <vector>using namespace std;int main(){    /*    We initialize a 2D vector    named "vect" on line 16 with    different number of values    in each element.    */         vector<vector<int>> 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;}   
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 whereevery row has a certain number of valuesas defined by the user.(On line 13)*/   #include <iostream>#include <vector>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.    */         vector<vector<int>> 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 = column[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;}
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 <iostream>#include <vector>using namespace std;int main(){    int n = 3;    int m = 4;     /*    We create a 2D vector containing "n"    elements each having the value "vector<int> (m, 0)".    "vector<int> (m, 0)" means a vector having "m"    elements each of value "0".    Here these elements are vectors.    */    vector<vector<int>> 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;}
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 <iostream>#include <vector>using namespace std;int main(){    int n = 4;    int m = 5;     /*    Create a vector containing "n"    vectors each of size "m".    */    vector<vector<int>> 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;}
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 write.geeksforgeeks.org or mail your article to review-team@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.
Blinkii
greengod
dunno64
shashikantg
sachisahu
adnanirshad158
arorakashish0911
ruhelaa48
prachisoda1234
cpp-vector
STL
C++
STL
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Constructors in C++
Socket Programming in C/C++
Operator Overloading in C++
Copy Constructor in C++
Virtual Function in C++
Templates in C++ with Examples
rand() and srand() in C/C++
vector erase() and clear() in C++
unordered_map in C++ STL
Left Shift and Right Shift Operators in C/C++