Jak usunąć dwuwymiarową tablicę w C ++

Jak usunąć dwuwymiarową tablicę w C ++
Tablicę 2D można utworzyć na dwa sposoby: za pomocą normalnej pamięci lub za pomocą bezpłatnego sklepu. Kiedy program działa, ma normalną część pamięci i dodatkową pamięć do użycia. Program nie jest zobowiązany do korzystania z dodatkowej pamięci o nazwie Free Store. Program utworzy zwykłą tablicę 2D w normalnej pamięci. Jeśli program ma utworzyć tę samą tablicę 2D w bezpłatnym sklepie, musiałby to zrobić dynamicznie. Składniki do utworzenia dwuwymiarowej tablicy w dowolnym rodzaju pamięci są różne. Aby usunąć zwykłą tablicę 2D, po prostu pozwól jej wyjść z zakresu. Aby usunąć tablicę 2D, utworzoną w bezpłatnym sklepie, odpowiednio użyj operatora Delete [].

Tworzenie zwykłej tablicy 2D

Poniższe stwierdzenie tworzy zwykłą tablicę 2D:

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”;

Jeśli ta tablica jest tworzona w globalnym zakresie, nie można jej użyć (e.G. ponownie przypisał wartość elementu) w globalnym zakresie. Może jednak mieć dowolny z jego elementów, cofnie wartość w innych rozszczepieniach.

Aby usunąć tę tablicę, po prostu pozwól jej wyjść z zakresu. Gdyby został utworzony w zakresie innego niż globalny zakres, ulegałby temu na końcu bloku (). Gdyby został stworzony w globalnym zakresie, zniknąłby to tylko z zakresu na koniec programu.

Darmowa tablica sklepu 2d

Poniższe stwierdzenie pokazuje, w jaki sposób powyższa tablica, ale z inną nazwą wskaźnika można utworzyć dynamicznie w bezpłatnym sklepie:

String (*ptr2d) [5] = nowy 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”;

Zwróć uwagę, jak utworzono tablicę 2D z nowym operatorem. Nazwa tablicy to ptr2d.

Jeśli ta tablica jest tworzona w globalnym zakresie, nie można jej użyć (e.G. ponownie przypisał wartość elementu) w globalnym zakresie. Może jednak mieć dowolny z jego elementów, cofnąć wartość w innych rozszczepieniach.

Aby usunąć tę tablicę, użyj operatora Delete [], jak pokazano poniżej. Tablicy w bezpłatnym sklepie nie można tak naprawdę usunąć, pozwalając, by zejść z zakresu. Należy go usunąć za pomocą operatora Delete [] w zakresie, aby uwolnić pamięć.

Treść artykułu

- Wprowadzenie - patrz wyżej

- Usuwanie zwykłej tablicy 2D

- Usuwanie dynamicznie utworzonych 2D wskaźników bezpłatnego sklepu

- Wniosek

Usuwanie zwykłej tablicy 2D

Dwuwymiarowa zwykła tablica zostaje usunięta, pozwalając jej zejść z zakresu. Poniższy program ilustruje to zagnieżdżonym zakresem:

#włączać
za pomocą przestrzeni nazw 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] <powrót 0;

Wyjście to BB. Konstrukt IF ma blok, który jest zagnieżdżonym zakresem. Tablica przestaje istnieć na końcu bloku. W programie jest wskaźnik komentarza, tuż poniżej bloku. Jeśli zostanie usunięty, program nie zostanie skompilowany i zostanie wydany komunikat o błędzie. Wynika to z faktu, że tablica 2D jest martwa na końcu bloku.

W poniższym programie zwykła tablica 2D zadeklarowana w ciele funkcyjnym umiera na końcu bloku funkcyjnego:

#włączać
za pomocą przestrzeni nazw 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 ();
powrót 0;

Wyjście jest nadal, BB. W programie znajduje się wskaźnik komentarza w programie funkcyjnym. Jeśli zostanie usunięty, program nie zostanie skompilowany i zostanie wydany komunikat o błędzie. Wynika to z faktu, że tablica 2D jest martwa na końcu bloku. Przypomnijmy również, że przypisanie wartości do elementu 2D po deklaracji nie jest dozwolone w globalnym zakresie.

Usuwanie dynamicznie utworzonych 2D wskaźników bezpłatnego sklepu

Przydział po deklaracji jest niedozwolony w globalnym zakresie. Dlatego wygodne jest posiadanie deklaracji tablicy 2D, w zagnieżdżonym zakresie, w głównej funkcji C ++, z powodów pedagogicznych.

Dwuwymiarowa tablica, zadeklarowana w powyższym formularzu, jest usuwana z składnią „Usuń [] 2darray”. To usunięcie musi odbyć się w swoim zakresie, aby uwolnić pamięć i uniknąć wycieku pamięci. Poniższy program ilustruje to z zagnieżdżonym zakresem:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

if (1 == 1)
String (*ptr2d) [5] = nowy 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] <usuń [] ptr2d;
Cout<< ptr2D[0][0] <
powrót 0;

Wyjście to, AA, z ptr2d [0] [0]. Po usunięciu ptr2d [0] [0] nic nie zwraca. Chociaż inne elementy, takie jak ptr2d [1] [1], nadal zwróciłyby wartość, tablica jest uważana za usunięta.

2d darmowa tablica sklepu jako wskaźnik do wskaźnika

Tablicę 2D może być utworzona jako wskaźnik do wskaźnika. W takim przypadku wszystkie wiersze będą musiały zostać najpierw usunięte, zanim pozostała jednowymiarowa tablica, zostanie usunięta. Poniższy program ilustruje to w głównej funkcji C ++:

#włączać
za pomocą przestrzeni nazw Std;
int main ()

String ** ptr2d = nowy ciąg*[3]; // nie wierszy
ptr2d [0] = nowy ciąg [5];
ptr2d [0] [0] = "aa"; ptr2d [0] [1] = „ab”; ptr2d [0] [2] = "ac"; ptr2d [0] [3] = "ad";
ptr2d [1] = nowy ciąg [5];
ptr2d [1] [0] = "ba"; ptr2d [1] [1] = "bb"; ptr2d [1] [2] = "bc"; ptr2d [1] [3] = "bd";
ptr2d [2] = nowy ciąg [5];
ptr2d [2] [0] = "ca"; ptr2d [2] [1] = "cb"; ptr2d [2] [2] = "cc"; ptr2d [2] [3] = "cd";
Cout<< ptr2D[1][1] <// uwolnij każdą podrzędną (wiersz)
dla (int i = 0; i< 3; ++i)
usuń [] ptr2d [i];

usuń [] ptr2d; // Uwolnij szereg wskaźników
Cout<< ptr2D[1][1] <powrót 0;

Wyjście to BB przed usunięciem. Po usunięciu wartość zwracana z ptr2d [1] [1] jest niczym.

Teraz ta tablica wskaźnika 2D w bezpłatnym sklepie jest wskaźnikiem jednowymiarowej tablicy, tablic wskaźników. Tak więc, aby usunąć tablicę 2D w bezpłatnym sklepie, wszystkie wiersze muszą zostać najpierw usunięte z Delete [], zanim zostanie usunięta główna jednowymiarowa tablica wskaźnika. To wykorzystuje schemat operatora Delete [] dla tablicy 2D w bezpłatnym sklepie.

Włączenie biblioteki

Nowy i operator usuwania, są faktycznie zdefiniowane w bibliotece. Jednak włączenie tej biblioteki jest opcjonalne.

Wniosek

Aby usunąć zwykłą tablicę 2D, po prostu pozwól jej wyjść z zakresu. Jeśli tablica 2D jest w bezpłatnym sklepie, należy ją usunąć za pomocą operatora Delete [], aby uwolnić pamięć w zakresie, w którym jest zadeklarowana. Jeśli tablica 2D w bezpłatnym sklepie została utworzona z konwencjonalną składnią, to prosta „Usuń [] 2darrayName” zrobiłaby dla usunięcia. Jeśli został utworzony jako wskaźnik wskaźnika do punktu, wiersze będą musiały zostać najpierw usunięte za pomocą „Delete [] 2darrayName [i]”, a następnie pozostałej tablicy 1D (bez elementów), zostaną usunięte za pomocą „Delete [] 2darrayName ”.