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

时间:2014-02-09 19:38:28

标签: c++ arrays dynamic

我正在学习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;我该怎么做?

同样,当我删除一个项目时(比如当我删除上面的人[1]时),如何将数组缩小到最小尺寸?比如,如何让人们[2]的对象移动到人的位置[1]?

非常感谢任何建议或帮助,谢谢!

RH

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

您需要实施重新分配

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

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

在幕后,std::vector做同样的事情。

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


删除元素时,需要将所有元素在较高的位置移动一个元素。同样,你只需要移动指针,而不是对象本身。