Двумерный массив на основе valarray

подскажите как сделать двумерный массив с помощью valarray. Можно ли это сделать без слайсов,чтобы можно было обращаться к нему с помощью индексов.

Если можно,то что мне нужно поменять в моём коде,чтоб он работал и я мог в будущем обращаться к двумерному массиву за счёт индексов?=)

#include <iostream>
#include <clocale>
#include <ctime>
#include <valarray>

using namespace std;

int main() 
{
setlocale(LC_ALL, "ru");
srand(time(NULL));

int rows = 0; int columns = 0; int i = 0; int j = 0;
valarray<valarray<double>>M;


cout << "Введите размерность массива! " << endl;
cout << "Введите кол-во строк: "; cin >> rows;
cout << "Введите кол-во столбцов: "; cin >> columns;

cout << "\n\tMatrix: " << endl;
for (size_t i = 0; i < rows; ++i)
{
    for (size_t j = 0; j < columns; ++j)
    {
        M[i][j] = rand() % 10 - 5;
        cout << "\t" << M[i][j];
    }
    cout << endl;
}
cout << endl;



cout << "\n Press any key ... " << endl;
system("PAUSE");
return 0;
}

Ответы (1 шт):

Автор решения: goldstar_labs
....
cout << "Введите кол-во столбцов: "; cin >> columns;

M.resize(rows); // Задаём количество строк

for (auto& it : M)
{
    it.resize(columns); // Для каждой строки задаём размер столбца
}

cout << "\n\tMatrix: " << endl;
...
→ Ссылка