2
int *ptr_Array;
ptr_Array = new int[5];

配列の最後の要素を削除することはできますか? 一度に 1 つずつ int をプッシュできます。配列全体を削除できます。

delete []ptr_Array;
ptr_Array = NULL;

要素をポップオフする方法が見つかりません。

私は次のことを試しましたが、他の試みもたくさんありました。

ptr_Array[i_IastItem] = NULL; 

私はそれを理解することができません、私は一日中試しています。

4

5 に答える 5

2

代わりにa を使用できますstd::vector

std::vector<int> x;
x.push_back(42);
x.pop_back();
于 2012-09-26T18:59:03.507 に答える
2

配列のサイズを、既に割り当てたものよりも大きくまたは小さく変更する必要がある場合は、再割り当てする必要があります。これには多くのオプションはありません:

  1. malloc()realloc()、およびを使用して、配列を作成、サイズ変更、および破棄しfree()ます。

  2. で配列を作成しnew[]て埋め、次に新しいサイズの別の配列を作成しnew[]てそれに応じて埋め、最後delete[]に古いもので埋めます。

もちろん、使用することもできますstd::vectorが、それをしたくないとすでに述べています。

オペレーティング システムは、一度にメモリのブロックを割り当てます。より多くのメモリが必要な場合は、隣接するメモリ ロケーションが使用可能であることが保証されていないため、全体と追加のスペースを再度割り当て直す必要があります。配列の一部の割り当て解除も、通常はサポートされていません。理由についての詳細はわかりませんが、すべてのプログラムが必要以上に多くのメモリを割り当ててから、メモリを少しずつ解放することができれば、メモリのパーティション分割がはるかに難しくなる可能性が高いと思います。あちこち。あちこちで記憶を断片化することになります。解放されたメモリは、メモリを少しずつ解放しているため、おそらく他のプログラムには役に立たないでしょう。プログラム、配列、またはその他のものをその小さな穴に入れることはできません。

于 2012-09-26T19:07:47.697 に答える
1

最後の要素を削除するだけの簡単なコード:

int size = /* insert size of array here */;
int new_ptr* = new int[size-1];
int i;
for (i = 0; i < size-1; ++i) {
    new_ptr[i] = ptr_Array[i];
}
delete[] ptr_Array;
ptr_Array = new_ptr;

そこで、あなたが望んでいたことが行われます。はptr_Array、同じ順序で同じ値の配列になりましたが、最後の要素が取り除かれ、配列のサイズが以前より 1 小さくなっています。

std::vectorしかし、正直なところ、私は他の回答者に同意し、C++で使用する必要があると思います。配列は、特に別の変数でそのサイズを常に追跡する必要があるため、頭痛の種になる可能性があります。

于 2012-09-26T19:42:06.167 に答える
0

アイテムを好きなようにポップしたりプッシュしたりしたい場合は、std::vector クラスについて読んでください。

于 2012-09-26T18:59:16.090 に答える
0

配列には、何かをプッシュしたり、ポップアウトしたりすることはできません。C++ の配列には固定サイズがあり、push / pop 演算子があるように見せることはできますが、配列自体にはこれらがありません。

于 2012-09-26T18:59:49.617 に答える