【问题标题】:Delete only first element of array仅删除数组的第一个元素
【发布时间】:2012-12-03 21:42:35
【问题描述】:

是否可以这样做:

int *iarray = new int[10];
.....
//do something with it
.....

然后为了轻松删除第一个元素,请执行以下操作:

delete iarray;
iarray++;

似乎 delete (没有 [] )仍然会删除整个数组。 如果可能的话,删除第一个元素将是非常棘手和聪明的方法。 这个想法不是我的,我在某个地方看到过,但它对我不起作用。难道我做错了什么?

【问题讨论】:

  • 我刚开始学习 C++ 时问过这个问题。现在看来很傻。删除不能删除元素,只能删除整个数组。要从头开始删除元素,您应该根据您的用例使用不同的数据结构。

标签: c++ arrays delete-operator


【解决方案1】:

使用deque 从前面删除一个元素——这就是发明这个结构的目的。

【讨论】:

    【解决方案2】:

    看起来您正在编写 C++,在这种情况下,delete 技巧是疯狂和可怕的,并且不会起作用。你当然可以得到一个指向第二个元素的指针,如果这是你真正需要的,通过做指针数学,但要实际删除第一个项目,你必须将所有内容移回一个。

    【讨论】:

      【解决方案3】:

      这不会像你期望的那样工作。

      在此处查看此答案:

      How does delete[] know it's an array?

      它几乎回答了你的问题。

      【讨论】:

      • 谢谢我现在明白了。似乎在 Linux 中,数组的大小在数组本身之前没有保留四个字节(使用 new[] 时)。我会寻找这个问题的答案,但如果你知道一些链接,如果你发布它,我将非常感激。
      猜你喜欢
      • 1970-01-01
      • 2017-02-25
      • 2016-10-31
      • 1970-01-01
      • 2023-01-23
      • 2019-02-16
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多