是否可以从新的int []一次删除一个项目

时间:2012-09-26 18:57:49

标签: c++ arrays new-operator delete-operator

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

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

delete []ptr_Array;
ptr_Array = NULL;

我找不到关闭POP元素的方法。

我尝试了以下操作并加载了其他尝试。

ptr_Array[i_IastItem] = NULL; 

我无法理解,我一整天都在努力。

5 个答案:

答案 0 :(得分:2)

您可以改为使用std::vector

std::vector<int> x;
x.push_back(42);
x.pop_back();

答案 1 :(得分:2)

如果需要将数组的大小调整为大于或小于已分配的数组,则必须重新分配它。这个选项并不多:

  1. 使用malloc()realloc()free()创建,调整大小并销毁数组。

  2. 您使用new[]创建数组并填充它,然后使用new[]创建另一个新大小的数组,并相应地填充它,最后delete[]旧数组。

  3. 当然你可以使用std::vector,但你已经说过你不想这样做。

    操作系统一次分配内存块。如果您需要更多内存,则不能保证相邻的内存位置可供使用,因此您必须重新分配整个内容+额外的空间。取消分配数组的一部分也不是通常支持的内容。我不知道具体原因,但我认为这可能是因为如果每个程序可以分配超过它需要的内容,那么它会使分区内存变得更加困难,然后释放内存,而不是一点一滴的内存这里和那里。你最终会在整个地方分割你的记忆。释放的内存可能对其他程序没有用,只是因为你正在零散地释放内存 - 你不能把程序,数组或其他东西放在那个小洞里。

答案 2 :(得分: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。

但说实话,我同意其他的回答者,并认为你应该在C ++中使用std::vector。数组可能很头疼,特别是因为你总是需要在另一个变量中跟踪它的大小。

答案 3 :(得分:0)

如果你想按照自己的意愿弹出和推送项目,无论你想要什么,都可以阅读std :: vector类。

答案 4 :(得分:0)

数组中没有任何东西被推入或弹出它。 C ++中的数组具有固定的大小,虽然你可以给它们假设有推/弹操作符,但数组本身没有这些。