В C ++ вы можете легко выделить одномерный массив следующим образом:
T *array=new T[N];
И вы также можете удалить его с помощью одной инструкции:
delete[] array;
Компилятор будет знать волшебство, как освободить правильное количество байтов.
Но почему вы не можете размещать двумерные массивы, как этот?
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
. В C вы можете использовать массивы переменной длины в стеке, но вы не можете выделять их в куче (а пространство стека довольно ограничено), вы также можете создавать массивы переменной длины в C ++, но они выиграли ' t присутствовать в 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]=...;
}