如何在C++中增大和缩小双指针动态数组

How do I grow and shrink a double-pointer dynamic array in C++?

本文关键字:缩小 指针 动态 数组 C++      更新时间:2023-10-16

我正在学习C++,我应该使用双指针来构建一个动态的对象数组,该数组随着元素的添加和删除而增长和收缩。

我可以像这样创建数组:

Person** people = new Person*[10];

并添加如下对象:

people[0] = new Person(“Luke”);
people[1] = new Person(“Han”);
people[2] = new Person(“Leia”);

并删除如下对象:

delete people[1]
people[1] = null;

(至少我认为这是正确的。

但是我被困在几件事上...

问题:

一旦数组已满 10 个项目,如何为其他对象动态添加更多空间? 事实上,我认为在添加第一项之前,数组的大小可能应该为 0;我该怎么做?

同样,当我删除

一个项目时(比如当我删除上面的 people[1])时,如何将数组缩小到最小大小? 比如,我如何使人[2]处的对象移动到人[1]的位置?

任何建议或帮助将不胜感激,谢谢!

相对湿度

您需要创建一个更大尺寸的新数组,并从当前数组中复制数据并解除分配。

您需要实现重新分配

基本上,您创建第二个更大(或更小)的数组,将现有元素复制到那里,然后丢弃旧数组。

请注意,您只需要复制指针。对象本身不需要更改。

在引擎盖下,std::vector做同样的事情。

在创建更大的数组时,一种常见的做法是将其大小乘以 1.5-2 之间的因子。


删除元素时,您需要将所有元素移高到低一个元素。同样,您只需要移动指针,而不是对象本身。