首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ada -动态重新分配数组

Ada -动态重新分配数组
EN

Stack Overflow用户
提问于 2011-12-11 18:21:53
回答 3查看 1.9K关注 0票数 2

我正在尝试写一个基于数组的堆栈,它可以动态地重新分配。我遇到的主要问题是如何实现调整数组大小的过程。在C++中,它可能是这样的:

代码语言:javascript
复制
template<class T, int incr>
void Vector<T, incr>::inflate(int increase) {
    const int tsz = sizeof(T*);
    T** st = new T*[quantity + increase];
    memset(st, 0, (quantity + increase) * tsz);
    memcpy(st, storage, quantity * tsz);
    quantity += increase;
    delete []storage;
    storage = st;
}

其中int quantity;T** storage;在私有节中声明。

如果有人能和我分享一些样品,我将不胜感激。我试图查看Ada.Containers.Vectors的实现,但是……它太大了=P

到目前为止,我已经制作了这个Vector.ads,有人能帮上忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-11 23:13:32

假设您知道如何为堆栈初始分配(空)数组。

当您需要重新分配到更大的数组时,将其分配到一个本地访问变量中,类似于C++示例中的"st“。然后循环遍历现有的完整数组,将其元素复制到新分配的数组中。

Free,使用未检查释放的实例化旧数组--这是Vector记录中的Elements字段。然后将Elements字段设置为包含新分配的数组的变量。

从本质上讲,它与您的memset示例非常相似,只是您不需要使用sizeof(),并且您使用了memset/ C++的一个复制循环。

票数 4
EN

Stack Overflow用户

发布于 2011-12-13 04:32:04

好了,案子解决了。我已经完成了我的Vector类(实际上是在数组上构建的堆栈)。感谢大家的帮助。

以下是我的代码,仅供后人参考。希望有人能从中学到一些东西。Code -> https://gist.github.com/496a50bc7f5cd93f8d91

如果你想看一下,找到一些值得修改的地方,只需评论即可。;D

票数 6
EN

Stack Overflow用户

发布于 2011-12-12 03:32:51

如果您使用Ada.Containers.Vectors,中有一个有用的讨论。基本上,您可以使用Index_TypeElement_Type实例化通用包

代码语言:javascript
复制
package Container is new Containers.Vectors (Natural, T);

然后声明一个具有新类型的变量:

代码语言:javascript
复制
Stack : Container.Vector;

然后,Push过程变为Stack.AppendPop函数返回Stack.Last_Element。请注意prefixed notation的可用性。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8463278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档