[英]How do I grow and shrink a double-pointer dynamic array in C++?
我正在学习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]的位置?
任何建议或帮助,不胜感激,谢谢!
RH
您需要创建一个更大的新数组,并从当前数组中复制数据并取消分配。
您需要实现重新分配 。
基本上,您创建了另一个更大或更小的数组,将现有元素复制到那里,然后丢弃旧数组。
请注意,您只需要复制指针。 对象本身不需要更改。
在幕后, std::vector
做同样的事情。
创建更大的数组时,通常的做法是将其大小乘以1.5-2之间的某个倍数。
删除元素时,需要将所有元素移至较高位置,将元素移至较低位置。 同样,您只需要移动指针,而不是对象本身。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.