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

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
```

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
Recommended Articles
Page :