通过在前一个数组的末尾存储下一个元素来扩展数组
Posted
技术标签:
【中文标题】通过在前一个数组的末尾存储下一个元素来扩展数组【英文标题】:Expanding an array by storing the next element right after the end of the previous array 【发布时间】:2016-12-25 10:18:32 【问题描述】:假设您有一个大小为 13 的数组。假设没有连续的可用内存部分来存储大小为 14 的数组;将原始数组复制到新数组不是一种选择。因此,将数组扩展一个元素同时保持前 13 个元素相同的唯一方法是将第 14 个元素存储在第 13 个元素之后的下一个内存地址。如果此内存插槽可用,我将如何执行此操作?动态内存寻址?
【问题讨论】:
我认为你应该研究一下std::deque
是typically implemented...你应该能够大致了解如何去做。
"如果这个内存插槽可用,我该怎么做?"你怎么知道是否有可用的内存插槽?请显示一些代码。
我并不是说我知道这一点,我只是说如果没有可用的连续内存部分可用于创建新数组的大小为 14 的数组,因为那样我就必须这样做这边走。您可以通过尝试动态分配新数组并检查它是否返回错误来验证是否属于这种情况。
@Måns Nilsson 内存模型的实际实现不是由标准定义的,因此该内存的可用性完全取决于平台。它应该被视为不可用。
【参考方案1】:
没有标准的 C++ 方法。标准库通常定义了 realloc(),但在大多数平台上,它所做的只是调用另一个 malloc() 和 memcpy() 来复制内存。您可能希望使用隐藏该机制的标准库容器 - 这是最常见的 - 或使用内存池对象(分配所有可能需要的内存,然后在其中“分配”对象),这不太常见,通常应用于 FEMA 或图像处理或在 OpenGL 渲染引擎中。
【讨论】:
【参考方案2】:我建议取数组的长度并在长度 + 1 的位置插入数据。 例如:
int arraylength = abc.length;
abc[arraylength + 1].value = "Your Value";
【讨论】:
但是这个内存槽还没有被正式初始化/分配,所以它可能会在相同的执行过程中被未来的动态内存分配所取代。 这是内存损坏操作。 C++中也没有长度字段或方法之类的东西以上是关于通过在前一个数组的末尾存储下一个元素来扩展数组的主要内容,如果未能解决你的问题,请参考以下文章
如何从一个数组中查找指定的元素,并返回这个元素在数组中的位置