Related Articles

# How to flatten a Vector of Vectors or 2D Vector in C++

• Difficulty Level : Easy
• Last Updated : 07 Apr, 2020

Given a Vector of Vectors (2D vector), the task is to flatten this 2d vector.

Examples:

Input: vector = [[1, 2, 3, 4], [5, 6], [7, 8]]
Output: 1 2 3 4 5 6 7 8

Input: vector = [[1, 2], , [4, 5, 6, 8]]
Output: 1 2 3 4 5 6 8

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Algorithm:

1. 2D Vector can be flattened using iterators.
2. Store starting and ending iterator of every vector in two arrays, iStart & iEnd respectively.
3. Create a hasNext() method to check if it has the vector has next element or not.
4. Print the current element, if hasNext() yields true

Below is the implementation of the above approach:

 `// C++ program to flatten a``// Vector of Vectors or 2D Vector`` ` `#include ``using` `namespace` `std;`` ` `// Class to flatten the 2d vector``class` `FlattenVector {`` ` `public``:``    ``int` `n;`` ` `    ``vector::iterator> iStart;``    ``vector::iterator> iEnd;``    ``int` `currIndex;`` ` `    ``// Store ending and starting iterators.``    ``FlattenVector(vector >& v)``    ``{`` ` `        ``// Get the number``        ``// of rows in 2d vector``        ``n = v.size();``        ``currIndex = 0;``        ``iStart.resize(n);``        ``iEnd.resize(n);`` ` `        ``for` `(``int` `i = 0; i < n; i++) {``            ``iStart[i] = v[i].begin();``            ``iEnd[i] = v[i].end();``        ``}``    ``}`` ` `    ``// Returns true if any element is left.``    ``bool` `hasNext()``    ``{``        ``for` `(``int` `i = 0; i < n; i++) {``            ``if` `(iStart[i] != iEnd[i])``                ``return` `true``;``        ``}``        ``return` `false``;``    ``}`` ` `    ``int` `next()``    ``{``        ``// Vector at currIndex is printed,``        ``// increment currIndex.``        ``if` `(iStart[currIndex]``            ``== iEnd[currIndex]) {``            ``currIndex++;``            ``return` `next();``        ``}`` ` `        ``// Increment iterator``        ``// and return the value.``        ``else``            ``return` `*iStart[currIndex]++;``    ``}``};`` ` `// Driver code``int` `main()``{``    ``vector >``        ``v{ { 1, 2 },``           ``{ 3 },``           ``{ 4, 5, 6 },``           ``{ 7, 8, 9, 10 } };``    ``FlattenVector iter(v);`` ` `    ``while` `(iter.hasNext())``        ``cout << iter.next() << ``" "``;`` ` `    ``return` `0;``}`
Output:
```1 2 3 4 5 6 7 8 9 10
```
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