2D Vector In C++ With User Defined Size
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++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector< int >> vect
{
{1, 2},
{4, 5, 6},
{7, 8, 9, 10}
};
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;
}
|
In a 2D vector, every element is a vector.
Time Complexity: O(1)
Auxiliary Space: O(1)
C++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int row = 5;
int column[] = {5, 3, 4, 2, 1};
vector<vector< int >> vec(row);
for ( int i = 0; i < row; i++)
{
int col = column[i];
vec[i] = vector< int >(col);
for ( int j = 0; j < col; j++)
{
vec[i][j] = j + 1;
}
}
for ( int i = 0; i < row; i++)
{
for ( int j = 0; j < vec[i].size(); j++)
{
cout << vec[i][j] << " " ;
}
cout << endl;
}
return 0;
}
|
Time Complexity: O(N*N)
Auxiliary Space: O(N*N)
Another approach to access the vector elements:
C++
< div id= "highlighter_223295" class = "syntaxhighlighter nogutter " ><table border= "0" cellpadding= "0" cellspacing= "0" ><tbody><tr><td class = "code" >< div class = "container" >< div class = "line number1 index0 alt2" ><code class = "comments" > </code></ div >< div class = "line number3 index2 alt2" ><code class = "preprocessor" >#include <iostream> </code></ div >< div class = "line number4 index3 alt1" ><code class = "preprocessor" >#include <vector> </code></ div >< div class = "line number5 index4 alt2" ><code class = "keyword bold" > using </code> <code class = "keyword bold" > namespace </code> <code class = "plain" >std; </code></ div >< div class = "line number6 index5 alt1" ><code class = "undefined spaces" > </code> </ div >< div class = "line number7 index6 alt2" ><code class = "color1 bold" > int </code> <code class = "plain" >main() </code></ div >< div class = "line number8 index7 alt1" ><code class = "plain" >{ </code></ div >< div class = "line number9 index8 alt2" ><code class = "undefined spaces" > </code><code class = "comments" > </code></ div >< div class = "line number15 index14 alt2" ><code class = "undefined spaces" > </code> </ div >< div class = "line number16 index15 alt1" ><code class = "undefined spaces" > </code><code class = "plain" >vector<vector<</code><code class = "color1 bold" > int </code><code class = "plain" >>> vect </code></ div >< div class = "line number17 index16 alt2" ><code class = "undefined spaces" > </code><code class = "plain" >{ </code></ div >< div class = "line number18 index17 alt1" ><code class = "undefined spaces" > </code><code class = "plain" >{1, 2, 3}, </code></ div >< div class = "line number19 index18 alt2" ><code class = "undefined spaces" > </code><code class = "plain" >{4, 5, 6}, </code></ div >< div class = "line number20 index19 alt1" ><code class = "undefined spaces" > </code><code class = "plain" >{7, 8, 9} </code></ div >< div class = "line number21 index20 alt2" ><code class = "undefined spaces" > </code><code class = "plain" >}; </code></ div >< div class = "line number22 index21 alt1" ><code class = "undefined spaces" > </code> </ div >< div class = "line number23 index22 alt2" ><code class = "undefined spaces" > </code><code class = "comments" > </code></ div >< div class = "line number29 index28 alt2" ><code class = "undefined spaces" > </code> </ div >< div class = "line number30 index29 alt1" ><code class = "undefined spaces" > </code><code class = "comments" > </code></ div >< div class = "line number47 index46 alt2" ><code class = "undefined spaces" > </code> </ div >< div class = "line number48 index47 alt1" ><code class = "undefined spaces" > </code><code class = "keyword bold" > for </code> <code class = "plain" >(vector<</code><code class = "color1 bold" > int </code><code class = "plain" >> vect1D : vect) </code></ div >< div class = "line number49 index48 alt2" ><code class = "undefined spaces" > </code><code class = "plain" >{ </code></ div >< div class = "line number50 index49 alt1" ><code class = "undefined spaces" > </code><code class = "keyword bold" > for </code> <code class = "plain" >(</code><code class = "color1 bold" > int </code> <code class = "plain" >x : vect1D) </code></ div >< div class = "line number51 index50 alt2" ><code class = "undefined spaces" > </code><code class = "plain" >{ </code></ div >< div class = "line number52 index51 alt1" ><code class = "undefined spaces" > </code><code class = "plain" >cout << x << </code><code class = "string" > " " </code><code class = "plain" >; </code></ div >< div class = "line number53 index52 alt2" ><code class = "undefined spaces" > </code><code class = "plain" >} </code></ div >< div class = "line number54 index53 alt1" ><code class = "undefined spaces" > </code><code class = "plain" >cout << endl; </code></ div >< div class = "line number55 index54 alt2" ><code class = "undefined spaces" > </code><code class = "plain" >} </code></ div >< div class = "line number56 index55 alt1" ><code class = "undefined spaces" > </code> </ div >< div class = "line number57 index56 alt2" ><code class = "undefined spaces" > </code><code class = "keyword bold" > return </code> <code class = "plain" >0; </code></ div >< div class = "line number58 index57 alt1" ><code class = "plain" >} </code></ div ></ div ></td></tr></tbody></table></ div >
|
Time Complexity: O(N*N)
Auxiliary Space: O(N*N)
Like Java’s jagged arrays, each element of a 2D vector can contain a different number of values.
C++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector< int >> vect
{
{1, 2},
{4, 5, 6},
{7, 8, 9, 10}
};
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++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n = 4;
int m = 5;
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;
}
|
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.
Output
0 0 0 0
0 0 0 0
0 0 0 0
Time Complexity: O(N*M)
Auxiliary Space: O(N*M)
Yet Another Approach:
Suppose we want to create a 2D vector of “n” rows and “m” columns and input values.
C++
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int n = 4;
int m = 5;
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;
}
|
Output
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
Time Complexity: O(N*M)
Auxiliary Space: O(N*M)
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.
Last Updated :
10 Jan, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...