如何在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]的位置?
任何建议或帮助将不胜感激,谢谢!
相对湿度
您需要创建一个更大尺寸的新数组,并从当前数组中复制数据并解除分配。
您需要实现重新分配。
基本上,您创建第二个更大(或更小)的数组,将现有元素复制到那里,然后丢弃旧数组。
请注意,您只需要复制指针。对象本身不需要更改。
在引擎盖下,std::vector
做同样的事情。
在创建更大的数组时,一种常见的做法是将其大小乘以 1.5-2 之间的因子。
删除元素时,您需要将所有元素移高到低一个元素。同样,您只需要移动指针,而不是对象本身。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 如何在C++中增大和缩小双指针动态数组
- C++如何使用指针数组缩小图像
- 使用指针缩小C++中的类型转换