gpt4 book ai didi

arrays - Ada:添加新元素时修改数组长度

转载 作者:行者123 更新时间:2023-12-04 22:39:24 25 4
gpt4 key购买 nike

我尝试创建一个动态数组包。我有一个具有泛型类型的泛型包,然后我在 .ads 中声明了元素 Elem_Type 的数组(正索引)。我很好奇是否可以创建一个过程 Append(Vector, Item) 来修改 Vector 的长度,从而允许他再获取一个元素。就像你在 C 中有一个缓冲区 [100] 并为他分配 1 个元素以使其成为 101 然后在位置 101 上添加一些东西。

最佳答案

在 Ada 中,执行此操作的一般方法是创建一个新的更大的 block ,然后将内容复制到其中并释放旧 block 。我经常建议以一些大块大小的倍数分配新 block ,这样您就不必重新分配太多。所以就像如果你必须分配一个新数组,而不是只添加一个额外的元素,添加 500(或一些有意义的数字)。

请注意,即使在 C 中,realloc() 函数也经常这样做。 realloc() 函数实际上只添加另一个元素在非平凡的项目中并不常见。它经常必须创建一个全新的数组并进行复制,就像我为 Ada 建议的那样。

Ada 中的其他一些选项包括创建自己的存储池,这使得重新分配变得更容易和更快,但你必须想出如何做到这一点的算法或找到其他人。您也可以绑定(bind)到 C 函数,但不能将 malloc/realloc/free 与 Ada 的 new/unchecked_deallocation 混合使用

关于arrays - Ada:添加新元素时修改数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56328753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com