我需要一个动态数组,因此我需要通过指针分配必要的内存量。让我想知道哪个是一个好的解决方案,是 C++ 能够执行以下操作:
int * p = new int[6];
它分配必要的数组。我需要的是,之后我想增加这个数组的一些部分。一个(有缺陷的)例子:
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];
我不知道如何实现这种行为。
EDIT: std::vector
不适合我,因为我需要插入/删除的时间k
元素与数量成正比k
而不是存储在中的元素数量std::vector
.
在一般情况下,使用指针,我会指向任何非连续内存区域的开始,并记录它存储的元素数量。从概念上讲,我会将大数组分成许多小数组,并且不一定在内存中的连续空间中(删除会创建“空洞”,而分配不一定会“填充”它们)。
您可以通过使用来实现此行为std::vector
:
std::vector<int> v(6); // create a vector with six elements.
v.erase(v.begin() + 2); // erase the element at v[2]
v.insert(v.begin() + 2, 4, 0); // insert four new elements starting at v[2]
实际上,任何时候你想使用动态分配的数组,你应该首先考虑使用std::vector
。它并不能解决所有问题,但与其他 C++ 标准库容器一起,它绝对可以解决大多数问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)