我需要一个动态数组,所以我需要通过指针分配必要的内存量。是什么让我想知道哪个是一个好的解决方案,是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];
我不知道如何实现这种行为。
编辑:std::vector
对我不起作用,因为我需要插入/删除k
元素的时间与数字k
成比例,而不是存储的元素数量在std::vector
。
使用指针,在一般情况下,我会指出任何非连续内存区域的开始,我会记录它存储的元素数量。从概念上讲,我会将大数组分成许多小数组,而不一定在内存中的连续空间中(删除会创建“空洞”,而分配不一定“填充”它们。)
答案 0 :(得分:8)
您可以使用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 ++标准库容器一起,它绝对是大多数问题的解决方案。
答案 1 :(得分:1)
您应该在C ++中查看STL容器,例如vector具有您想要的功能。
答案 2 :(得分:1)
我建议不要自己这样做。查找std::vector
以获得合理的起点。
答案 3 :(得分:1)
除std::vector
之外的另一个选项是std::deque
,其工作方式大致相同,但在向中间插入块时效率更高一些。如果这对你来说仍然不够好,你可能会使用一系列收藏来获得一些里程。你需要做更多的工作来获得随机访问工作(也许写一个类来包装整个事情。