I have 2D array arr[i][j]. Where i is the index of list while [j]= list of five elements. For example
arr[0][1,2,3,4,5]
arr[1][6,7,9,2,1]
...
arr[n][1,3,2,4,8]
I want to convert it into 1D so that index indicator get remove and have list of elements only. Please guide me.
CodePudding user response:
you can loop through your 2d array and push into a new 1d array
vector<vector<int>> twoD;
vector<int> oneD;
for (int i=0; i<twoD.size(); i ) {
for(int j=0; j<twoD[i].size(); j ) {
oneD.push_back(twoD[i][j]);
}
}
return oneD;
CodePudding user response:
a more modern and working solution could be something like this.
std::array<std::array<int,4>,3> ar;
ar[0]={2,3,4,5};
ar[1]={6,7,8,9};
ar[2]={10,11,12,13};
std::vector<int> oneD;
for(const auto& firstLayer : ar){
for(const auto& secondLayerItem: firstLayer){
oneD.push_back(secondLayerItem);
}
}
CodePudding user response:
Consider using a std::span
to create a 1D view over the 2D array:
std::span sp(std::data(arr[0]), std::size(arr) * std::size(arr[0]));
Or simpler:
std::span sp(*arr, std::size(arr) * std::size(*arr));
Or if you already have the dimensions of the original array:
std::span sp(*arr, i * j);
Now you can view elements in sp
with sp[N]
. Demo: https://godbolt.org/z/ebeaEd6xn
Note, span
is only a view over the original array, so any modifications on sp
's element will be reflected to the original array.