通常の2D配列の作成
次のステートメントは、通常の2D配列を作成します。
{{「BA」、 「BB」、 “紀元前”、 「BD」、 “なれ”}、
{{「CA」、 「CB」、 「CC」、 “CD”、 「CE」}、
{{「DA」、 「DB」、 「DC」、 「DD」、 「DE」}、
{{「EA」、 「EB」、 「EC」、 「ED」、 「EE」}};
この配列がグローバルスコープで作成されている場合、グローバルスコープで使用(要素値の再割り当てなど)することはできません。 ただし、他のスコープの値をその要素のいずれかに再割り当てすることができます。
この配列を削除するには、スコープから外します。 グローバルスコープ以外のスコープで作成された場合、ブロック(})の最後でスコープ外になります。 グローバルスコープで作成された場合、プログラムの最後でのみスコープ外になります。
フリーストア2Dアレイ
次のステートメントは、上記の配列が異なるポインター名でフリーストアに動的に作成される方法を示しています。
{{「BA」、 「BB」、 “紀元前”、 「BD」、 “なれ”}、
{{「CA」、 「CB」、 「CC」、 “CD”、 「CE」}、
{{「DA」、 「DB」、 「DC」、 「DD」、 「DE」}、
{{「EA」、 「EB」、 「EC」、 「ED」、 「EE」}};
new演算子を使用して2D配列がどのように作成されたかに注意してください。 配列の名前はptr2Dです。
この配列がグローバルスコープで作成されている場合、グローバルスコープで使用(要素値の再割り当てなど)することはできません。 ただし、他のスコープで値を再割り当てして、その要素のいずれかを持つことができます。
この配列を削除するには、deleteを使用します[] 以下に示すように、演算子。 フリーストア内のアレイは、スコープ外に出して実際に削除することはできません。 削除して削除する必要があります [] 演算子は、そのスコープ内で、メモリを解放するために使用されます。
記事の内容
–はじめに–上記を参照
–2D通常配列の削除
–フリーストアの動的に作成された2Dポインタ配列の削除
– 結論
2D通常配列の削除
2次元の通常の配列は、スコープから外すだけで削除されます。 次のプログラムは、ネストされたスコープでこれを示しています。
名前空間stdを使用する;
int 主要(()。
{{
もしも ((1 == 1)。 {{
文字列arr2D[][5] = {{{{「AA」、 「AB」、 “交流”、 “広告”、 「AE」}、
{{「BA」、 「BB」、 “紀元前”、 「BD」、 “なれ”}、
{{「CA」、 「CB」、 「CC」、 “CD”、 「CE」}、
{{「DA」、 「DB」、 「DC」、 「DD」、 「DE」}、
{{「EA」、 「EB」、 「EC」、 「ED」、 「EE」}};
カウト<< arr2D[1][1] <<endl;
}
// cout << arr2D[1][1] << endl;
戻る 0;
}
出力は、BBです。 if-constructには、ネストされたスコープであるブロックがあります。 配列はブロックの終わりに存在しなくなります。 プログラムのブロックのすぐ下にコメントインジケーターがあります。 削除すると、プログラムはコンパイルされず、エラーメッセージが発行されます。 これは、2D配列がブロックの終わりで死んでいるという事実に起因します。
次のプログラムでは、関数本体で宣言された通常の2D配列は、関数ブロックの最後で終了します。
名前空間stdを使用する;
空所 fn(()。 {{
文字列arr2D[][5] = {{{{「AA」、 「AB」、 “交流”、 “広告”、 「AE」}、
{{「BA」、 「BB」、 “紀元前”、 「BD」、 “なれ”}、
{{「CA」、 「CB」、 「CC」、 “CD”、 「CE」}、
{{「DA」、 「DB」、 「DC」、 「DD」、 「DE」}、
{{「EA」、 「EB」、 「EC」、 「ED」、 「EE」}};
カウト<< arr2D[1][1] <<endl;
}
// cout << arr2D[1][1] << endl;
int 主要(()。
{{
fn(()。;
戻る 0;
}
出力はまだBBです。 プログラムの機能ブロックのすぐ下にコメントインジケータがあります。 削除すると、プログラムはコンパイルされず、エラーメッセージが発行されます。 これは、2D配列がブロックの終わりで死んでいるという事実に起因します。 また、宣言後の2D要素への値の割り当ては、グローバルスコープでは許可されていないことを思い出してください。
フリーストアの動的に作成された2Dポインタ配列を削除する
宣言後の割り当ては、グローバルスコープでは許可されていません。 したがって、教育上の理由から、ネストされたスコープのC++メイン関数に2D配列宣言を含めると便利です。
上記の形式で宣言された2次元配列は、「delete」という構文で削除されます。[] 2Darray」。 この削除は、メモリを解放し、メモリリークを回避するために、そのスコープ内で実行する必要があります。 次のプログラムは、ネストされたスコープを使用してこれを示しています。
名前空間stdを使用する;
int 主要(()。
{{
もしも ((1 == 1)。 {{
ストリング ((*ptr2D)。[5] = 新しい文字列[5][5] {{{{「AA」、 「AB」、 “交流”、 “広告”、 「AE」}、
{{「BA」、 「BB」、 “紀元前”、 「BD」、 “なれ”}、
{{「CA」、 「CB」、 「CC」、 “CD”、 「CE」}、
{{「DA」、 「DB」、 「DC」、 「DD」、 「DE」}、
{{「EA」、 「EB」、 「EC」、 「ED」、 「EE」}};
カウト<< ptr2D[0][0] <<endl;
消去 [] ptr2D;
カウト<< ptr2D[0][0] <<endl;
}
戻る 0;
}
出力は、ptr2DからのAAです。[0][0]。 削除後、ptr2D[0][0] 何も返しません。 ptr2Dなどの他の要素が[1][1] それでも値を返す場合、配列は削除されたと見なされます。
ポインタツーポインタとしての2Dフリーストアアレイ
2D配列は、ポインターからポインターとして作成できます。 この場合、残っている1次元配列を削除する前に、最初にすべての行を削除する必要があります。 次のプログラムは、C++のメイン関数でこれを示しています。
名前空間stdを使用する;
int 主要(()。
{{
ストリング ****ptr2D = 新しい文字列*[3]; //行数
ptr2D[0] = 新しい文字列[5];
ptr2D[0][0] = 「AA」; ptr2D[0][1] = 「AB」; ptr2D[0][2] = “交流”; ptr2D[0][3] = “広告”;
ptr2D[1] = 新しい文字列[5];
ptr2D[1][0] = 「BA」; ptr2D[1][1] = 「BB」; ptr2D[1][2] = “紀元前”; ptr2D[1][3] = 「BD」;
ptr2D[2] = 新しい文字列[5];
ptr2D[2][0] = 「CA」; ptr2D[2][1] = 「CB」; ptr2D[2][2] = 「CC」; ptr2D[2][3] = “CD”;
カウト<< ptr2D[1][1] <<endl;
//各サブ配列を解放します(行)
にとって((int 私 = 0; 私<< 3; ++私)。 {{
消去[] ptr2D[i];
}
消去[] ptr2D; //ポインタの配列を解放します
カウト<< ptr2D[1][1] <<endl;
戻る 0;
}
削除前の出力はBBです。 削除後、ptr2Dからの戻り値[1][1] なんでもない。
現在、フリーストア内のこのポインター2D配列は、ポインター配列の1次元配列のポインターです。 したがって、フリーストアで2D配列を削除するには、最初にすべての行をdeleteで削除する必要があります。[] 主要な1次元ポインタ配列が削除される前。 これは削除を使用します[] フリーストアの2D配列の演算子スキーム。
ライブラリの包含
newおよびdelete演算子は、実際には
結論
2Dの通常の配列を削除するには、スコープから外します。 2Dアレイがフリーストアにある場合は、削除を使用して削除する必要があります[] 宣言されたスコープ内のメモリを解放する演算子。 フリーストアの2Dアレイが従来の構文で作成された場合、単純な「削除 [] 2DarrayName」は削除を行います。 ポインタからポインタとして作成された場合は、最初に「delete」を使用して行を削除する必要があります。 [] 2DarrayName[i]」、次に残りの1D配列(要素なし)を「delete」で削除します。 [] 2DarrayName」。
The post C++で2次元配列を削除する方法 appeared first on Gamingsym Japan.