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

是否可以删除数组中的最后一个元素?我可以一次推一个整数。我可以删除整个数组。

delete []ptr_Array;
ptr_Array = NULL;

我找不到弹出元素的方法。

我尝试了以下和其他尝试。

ptr_Array[i_IastItem] = NULL; 

我只是想不通,我一直在尝试一整天。

4

5 回答 5

2

您可以使用 astd::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 回答