В C ++ вы можете легко выделить одномерный массив следующим образом:
T *array=new T[N];
И вы также можете удалить его одним оператором:
delete[] array;
Компилятор узнает магию какчтобы освободить правильное количество байтов.
Но почему вы не можете распределить 2-мерные массивы, как это?
T *array=new T[N,M];
Или даже так?
T *array=new T[N,M,L];
Если вы хотите многомерный, вы должны сделать это следующим образом:
T **array=new T*[N];
for(int i=0;i<N;i++) array[i]=new T[M];
Если вы хотите быструю программу, которая использует матрицы (матричные операции, алгоритмы собственных значений и т. Д.), Вы можете использоватькеш тоже для максимальной производительности, и это требует, чтобы данные были в одном месте.Использование vector<vector<T> >
- та же самая ситуация.В C вы можете использовать массивы переменной длины в стеке, но вы не можете выделить их в куче (а пространство стека довольно ограничено), вы можете также делать массивы переменной длины в C ++, но они не будут присутствовать в C++ 0x.
Единственный обходной путь довольно хакерский и с ошибкой:
T *array=new T[N*M];
for(int i=0;i<N;i++)
for(int j=0;j<M;j++)
{
T[i*N+j]=...;
}