Как преобразовать массив vector в матрицу vector>?
У меня есть цикл, преобразующий квадратную матрицу в плоский (одномерный) массив:
int n = 5; //для примера
vector<vector<int>> p1(n,vector<int>(n)); //наша матрица
// забиваем матрицу значениями
vector<int> p1_flat; //наш плоский массив
p1_flat.reserve(n * n);
for (auto const &row : p1)
copy(row.begin(), row.end(), back_inserter(p1_flat));
А как сделать наоборот?
Приветствуется хороший вариант с точки зрения производительности, потому что работаю с матрицами большого размера.
Ответы (2 шт):
Автор решения: e.n.shirokov
→ Ссылка
так
for(int i = 0, row = 0; i < p1_flat.size(); i += n, row++) {
copy_n(p1_flat.begin() + i, n, p1[row].begin());
}
Автор решения: Harry
→ Ссылка
int main(int argc, const char * argv[])
{
int n = 5;
vector<int> p1_flat;
for(int i = 0; i < n*n; ++i) p1_flat.push_back(i);
vector<vector<int>> p1(n,vector<int>(n));
for(int i = 0; i < n; ++i)
copy_n(p1_flat.begin()+i*n,n,p1[i].begin());
for(auto a: p1)
{
for(auto b: a) cout << setw(2) << b << " ";
cout << endl;
}
}