【发布时间】:2010-09-28 08:50:07
【问题描述】:
我需要一个动态数组,所以我需要通过指针分配必要的内存量。让我想知道哪个是一个好的解决方案,是 C++ 有能力做这样的事情:
int * p = new int[6];
分配必要的数组。我需要的是,之后,我想增加这个数组的某些部分。一个(n个有缺陷的)例子:
int *p1 = &p[0];
int *p2 = &p[2];
int *p3 = &p[4];
// delete positions p[2], p[3]
delete [] p2;
// create new array
p2 = new int[4];
我不知道如何实现这种行为。
编辑:std::vector 对我不起作用,因为我需要插入/删除k 元素的时间与k 的数量成正比,而不是与std::vector 中存储的元素数量成正比。
使用指针,在一般情况下,我会指向任何非连续内存区域的开始,我会考虑它存储了多少元素。从概念上讲,我会将大数组分成许多小数组,而不必在内存中的连续空间中(删除会产生“漏洞”,而分配不一定会“填充”它们)。
【问题讨论】:
-
从现在开始,每当您使用关键字
delete时,您都应该认真考虑自己做错了什么。 :) 正确的方法是将资源包装成可以为您管理的东西。这是 SBRM (RAII)。