繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM