2009-02-17 3 views
1

Как инициализировать и Uninitialize многомерный массив символов в C++?Многомерный массив символов

+1

В зависимости от языка. И что вы подразумеваете под uninitialize? – tehvan

+0

Я должен быть слепым, вы уже указали в C++: S – tehvan

+0

Домашний тег устарел. –

ответ

4

Прочитано FAQ - вы найдете все, что вам нужно!

Creation:

Статически выделяются:

char mda[ dim1_size ][ dim2_size ]...[ dimn_size ]; 

Динамически выделяются: Вложенные new[] вызовы.

Initialization:

Уплотненный для петель; как много размеров for.

Унификация: Вы имеете в виду Destruction?

Статически выделяется: компилятор делает это, когда фрейм стека разматывается (или для глобальных переменных - когда программа перестает работать).

Динамически выделяются:

Using nested delete[]. 
0

вы можете инициализировать многомерный массив так:

int grid[2][3] = {1, 3, 5, 2, 4, 6}; 

в этом случае Seperate значения будут:

grid[0, 0]: 1 
grid[0, 1]: 3 
grid[0, 2]: 5 
grid[1, 0]: 2 
grid[1, 1]: 4 
grid[1, 2]: 6 
1

Быстрый фрагмент - он компилируется в g ++.

int rows = 10; 
int cols = 10; 

char** array = new char*[rows]; 
for(int i = 0; i < cols; ++i) { 
    array[i] = new char[cols]; 
} 

//do stuff with array 

for(int i = 0; i < cols; ++i) { 
    delete array[i]; 
} 
delete array; 
+1

О, мой бог, это ужасно. Это C с маскировкой C++! –

1

Это интересно, и это требует серьезного взгляда.

Ответ дается Им широко используется один, но мне нравится его наблюдение - только потому, что он компилирует не означает, что она работает

Я думаю, что лучшее решение было бы выделить contigious блока памяти (строки * cols), а затем рассматривать его как 2D-массив?

+1

Было бы интересно выделить непрерывный блок памяти, но при этом вы теряете любую возможность изменять размер вашего массива в каждом измерении. –

2

Предлагаю вам использовать библиотеку Boost.Multi_Array. Размер массива должен быть предоставлен во время компиляции, но размеры используются только во время выполнения. Это означает, что у вас есть преимущества динамического распределения без боли при решении проблем с памятью.

Здесь приведен пример из Boost documentation.

int 
main() { 
    // Create a 3D array that is 3 x 4 x 2 
    typedef boost::multi_array<double, 3> array_type; 
    typedef array_type::index index; 
    array_type A(boost::extents[3][4][2]); 

    // Assign values to the elements 
    int values = 0; 
    for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j) 
     for(index k = 0; k != 2; ++k) 
     A[i][j][k] = values++; 

    // Verify values 
    int verify = 0; 
    for(index i = 0; i != 3; ++i) 
    for(index j = 0; j != 4; ++j) 
     for(index k = 0; k != 2; ++k) 
     assert(A[i][j][k] == verify++); 

    return 0; 
} 
0

Я узнал его с крестики нолики борту

const int ROW = 3; 
const int COLUMN = 3; 
char board [ROW] [COLUMN] = {{'O', 'X', 'O'}, 
          {'X', 'X', 'X'}, 
          {'X', 'O', 'X'}}; 

Я надеюсь, что это помогло.

Смежные вопросы