2D Vector In C++ With User Defined Size

A 2D vector is a vector of 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: 

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program
#include <iostream>
 
/* 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;
}

chevron_right


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

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

/* 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;
}

chevron_right


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.

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

/*
C++ program to demonstrate a 2D vector where
each 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;
}   

chevron_right


Output : 



1 2 
4 5 6 
7 8 9 10 

Exercise Problem : Define the 2D vector with different sizes of column. 
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.

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

/*
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 <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 colom[] = {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 assinged
    it a capacity of "row"(in this case 5) units.
    */
     
    /*
    Now we will proceed to create the sturture 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;
}

chevron_right


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.

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


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 “b” columns and input values. 

CPP

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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;
}

chevron_right


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.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up

Improved By : Blinkii, greengod

Article Tags :
Practice Tags :


65


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.