使用动态分配的数组和realloc()实现一些常见的ADT

洛克2000

当然,每个程序员都听说过实现说带有数组的堆栈有其缺点,其中最大的缺点是固定大小。但是在学习了realloc函数之后,似乎存在一种方法来实现这种ADT和其他具有动态变化的数组的ADT,如下所示:

首先,我将使用malloc函数动态分配数组的第一个成员。然后,当我想添加另一个成员时,我要做的就是重新分配大小以增加它,并使用array [n + 1] = new项添加它。第三,如果要删除项目,可以再次使用realloc函数缩小动态数组。

好处是令人惊讶的(至少从我的角度来看),因为您将拥有例如具有动态分配存储和常规数组(例如随机访问和易于操作等)的好处的堆栈。

老实说,我真的不能相信这是可行的,因为如果是那样的话,我为什么不在任何教科书或互联网上读到它(我不可能在这里做出某种发明或以此类推。其实还是个新手)。

所以肯定有什么不对劲的地方,我已经准备好听听:)

托尼·德罗伊(Tony Delroy)

一个关键的问题realloc是它可能会或可能不会将现有内存内容移至新缓冲区,但是如果它决定这样做,则将使用逐字节复制(ala memcpy)。

通常,应使用C ++对象的move或copy构造函数来移动或复制C ++对象,并且要释放的内存中的任何对象都应调用其析构函数。malloc/ realloc/free功能一般没有任何“挂钩”,让来电管理对象的复制,所以它是不切实际的C ++库使用realloc,用于存储任意类型的对象缓冲区。

也就是说,realloc可以用于memcpy可以接受样式移动的非常简单的对象人们确实使用hack容器类realloc-仅AFAIK这样的容器并没有流行到足以将其放入主要库中,这可能是因为性能收益比您期望的要少(这取决于realloc可以使用的时间比例)调整大小,例如在调整大小时vector具有reserve内在的容量加倍,这往往会限制复制成本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章