我正在学习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 之间的因子。
删除元素时,您需要将所有元素移高到低一个元素。同样,您只需要移动指针,而不是对象本身。