Como excluir uma matriz bidimensional em C ++

Como excluir uma matriz bidimensional em C ++
Uma matriz 2D pode ser criada de duas maneiras: usando a memória normal ou usando a loja gratuita. Quando um programa está em execução, ele tem sua parte normal de memória e memória extra para usar. O programa não é obrigado a usar a memória extra chamada loja gratuita. O programa criaria uma matriz 2D comum na memória normal. Se o programa for criar a mesma matriz 2D na loja gratuita, teria que fazê -lo dinamicamente. As sintaxes para criar a matriz bidimensional em qualquer tipo de memória são diferentes. Para excluir uma matriz 2D comum, deixe -a sair do escopo. Para excluir uma matriz 2D, criada em uma loja gratuita, use o operador Excluir [] apropriadamente.

Criação de matriz 2D comum

A declaração a seguir, cria uma matriz 2D comum:

String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Se essa matriz for criada no escopo global, ela não poderá ser usada (e.g. reatribuir um valor de elemento) no escopo global. No entanto, pode ter algum de seus elementos transferindo um valor nos outros escopos.

Para excluir esta matriz, deixe -a sair do escopo. Se fosse criado em um escopo que não seja o escopo global, sairia do escopo no final de seu bloco (). Se fosse criado no escopo global, só sairia do escopo no final do programa.

Array 2D de loja grátis

A declaração a seguir mostra como a matriz acima, mas com um nome de ponteiro diferente pode ser criado dinamicamente na loja gratuita:

String (*ptr2d) [5] = new String [5] [5] "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";

Observe como a matriz 2D foi criada com o novo operador. O nome da matriz é ptr2d.

Se essa matriz for criada no escopo global, ela não poderá ser usada (e.g. reatribuir um valor de elemento) no escopo global. No entanto, pode ter algum de seus elementos, transferindo um valor nos outros escopos.

Para excluir esta matriz, use o operador Excluir [], como mostrado abaixo. A matriz na loja gratuita não pode realmente ser excluída, deixando -a sair do escopo. Ele deve ser excluído com o operador excluir [] em seu escopo, a fim de liberar memória.

Conteúdo do artigo

- Introdução - Veja acima

- Excluindo uma matriz comum 2D

- Excluindo dinamicamente criada a matriz de ponteiro 2D da loja gratuita

- Conclusão

Excluindo uma matriz comum 2D

Uma matriz comum bidimensional é excluída apenas deixando-a sair do escopo. O programa a seguir ilustra isso com um escopo aninhado:

#incluir
usando namespace std;
int main ()

if (1 == 1)
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <retornar 0;

A saída é, BB. O consumo IF tem um bloco que é o escopo aninhado. A matriz para existir no final do bloco. Há um indicador de comentários, logo abaixo do bloco, no programa. Se for removido, o programa não será compilado e uma mensagem de erro será emitida. Isso resulta do fato de a matriz 2D estar morta no final do bloco.

No programa a seguir, a matriz 2D comum declarada no corpo da função morre no final do bloco de funções:

#incluir
usando namespace std;
void fn ()
String arr2d [] [5] = "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< arr2D[1][1] <
// cout<< arr2D[1][1] <int main ()

fn ();
retornar 0;

A saída ainda é, BB. Há um indicador de comentários logo abaixo do bloco de funções no programa. Se for removido, o programa não será compilado e uma mensagem de erro será emitida. Isso resulta do fato de a matriz 2D estar morta no final do bloco. Lembre -se também de que, a atribuição de um valor para um elemento 2D, após a declaração, não é permitida no escopo global.

Excluindo dinamicamente criada a matriz de ponteiro 2D da loja gratuita

A tarefa após a declaração não é permitida no escopo global. Portanto, é conveniente ter uma declaração de matriz 2D, em um escopo aninhado, na função principal do C ++, por razões pedagógicas.

Uma matriz bidimensional, declarada na forma acima, é excluída com a sintaxe, “exclua [] 2Darray”. Esta exclusão deve ocorrer em seu escopo para a memória livre e para evitar vazamentos de memória. O programa a seguir ilustra isso, com um escopo aninhado:

#incluir
usando namespace std;
int main ()

if (1 == 1)
String (*ptr2d) [5] = new String [5] [5] "aa", "ab", "ac", "ad", "ae",
"Ba", "bb", "bc", "bd", "be",
"CA", "CB", "CC", "CD", "CE",
"Da", "db", "dc", "dd", "de",
"Ea", "eb", "ec", "ed", "ee";
cout<< ptr2D[0][0] <excluir [] ptr2d;
cout<< ptr2D[0][0] <
retornar 0;

A saída é, aa, de ptr2d [0] [0]. Após a exclusão, ptr2d [0] [0] retorna nada. Embora os outros elementos como ptr2d [1] [1] ainda retornassem um valor, a matriz é considerada excluída.

2d Array de loja gratuita como ponteiro a ponte

Uma matriz 2D pode ser criada como um ponteiro para apontar. Nesse caso, todas as linhas terão que ser excluídas primeiro antes que a matriz unidimensional restante seja excluída. O programa a seguir ilustra isso na função principal do C ++:

#incluir
usando namespace std;
int main ()

String ** ptr2d = new String*[3]; // não de linhas
ptr2d [0] = new String [5];
ptr2d [0] [0] = "aa"; ptr2d [0] [1] = "ab"; ptr2d [0] [2] = "AC"; ptr2d [0] [3] = "ad";
ptr2d [1] = nova string [5];
ptr2d [1] [0] = "ba"; ptr2d [1] [1] = "bb"; ptr2d [1] [2] = "bc"; ptr2d [1] [3] = "bd";
ptr2d [2] = nova string [5];
ptr2d [2] [0] = "CA"; ptr2d [2] [1] = "cb"; ptr2d [2] [2] = "cc"; ptr2d [2] [3] = "CD";
cout<< ptr2D[1][1] <// GRÁTIS CADA SUB-ARRAY (LINHA)
para (int i = 0; i< 3; ++i)
excluir [] ptr2d [i];

excluir [] ptr2d; // livre a variedade de ponteiros
cout<< ptr2D[1][1] <retornar 0;

A saída é BB antes de excluir. Após a exclusão, o valor de retorno de ptr2d [1] [1] não é nada.

Agora, esta matriz 2D Pointer na loja gratuita é um ponteiro em uma matriz dimensional, de matrizes de ponteiro. Portanto, para excluir a matriz 2D em uma loja gratuita, todas as linhas devem ser excluídas primeiro com excluir [] antes que a principal matriz de ponteiro unidimensional seja excluído. Isso usa o esquema de operador de exclusão [] para uma matriz 2D em uma loja gratuita.

Inclusão da biblioteca

O novo operador e excluir, é realmente definido na biblioteca. No entanto, incluindo esta biblioteca é opcional.

Conclusão

Para excluir uma matriz comum 2D, deixe -a sair do escopo. Se a matriz 2D estiver em uma loja gratuita, deve ser excluída com o operador delete [] para a memória livre no escopo em que é declarado. Se a matriz 2D na loja gratuita fosse criada com uma sintaxe convencional, um simples "excluir [] 2DARRAYNAME" faria por exclusão. Se foi criado como um ponteiro a apontar, as linhas deverão ser excluídas primeiro com “excluir [] 2DARRAYNAME [i]” e depois a matriz 1D restante (sem elementos), seja excluída com “delete [] 2DARRAYNAME ”.