2012-12-03 192 views
2

的只有第一个元素是有可能做这样的事情:删除阵列

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

,然后以轻松去除第一要素做到这一点:

delete iarray; 
iarray++; 

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

回答

1

这将无法按预期工作。

退房这里这样的回答:

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

它几乎回答你的问题。

+0

谢谢我现在明白了。看起来,在Linux中,数组的大小在自己排列之前并不保留四个字节(当使用new []时)。我会搜索这个问题的答案,但如果你知道某个链接,我会非常感谢你,如果你发布它。 – Marko

2

它看起来像你正在写C++,在这种情况下delete技巧是疯狂和可怕的,并不会工作。你当然可以只是得到一个指针第二个元素,如果这是你真正需要做指针数学,但实际上删除第一个项目,你将不得不将所有的东西都移回去。

4

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