1 Востаннє редагувалося koala (08.01.2014 13:09:10)

Тема: Двовимірний динамічний масив C++

Як все ж правильно створювати сабж (до C++11)? Що школярам показувати?

Одновимірний масив як двовимірний

int n = 10;
int *array = new int [ n*n ];
array[ n * i + j ] = ...
delete array;

Переваги: простота реалізації.
Недоліки: змінюється (порівняно зі статикою) номер елементу.

Динамічний масив динамічних масивів

int n = 10;
int **array = new int * [ n ];
for( int i = 0; i < n; ++i )
  array[ i ] = new int [ n ];
array[ i ][ j ] = ...
for( int i = 0; i < n; ++i )
  delete array[ i ];
delete array;

Переваги: гнучкість (довжина рядків може бути різною - пилковидний масив), традиційна адресація.
Недоліки: складність рішення, нетривіальне видалення (аналог створення).

Приведення типів

int n = 10;
int (&array)[ n ][ n ] = *reinterpret_cast< int (*)[ n ][ n ] >(new int[ n * n ]); 
array[ i ][ j ] = ...
delete &array;

Переваги: традиційна адресація, правильна робота sizeof.
Недоліки: складність рішення на рівні магії, не певен, що спрацює на старих компіляторах.

Подякували: Chemist-i, Logans, incred3