如何将动态内存分配数组的大小调整为特定值

How to resize an dynamic memory allocated array to a specific value?

本文关键字:调整 动态 内存 数组 分配      更新时间:2023-10-16

所以我有一个名为digits的数组,它具有动态分配的内存。初始容量设置为默认容量20。我试图弄清楚如何实现以下代码,以便如果添加到超出容量的数组中,代码将创建一个大2^n的新数组(即40,80,160)。然而,我希望它有一个for循环,它将使数组变大2^n,直到新的容量大于输入的容量。

void BigNum::resize(size_t n)
{
size_t *NEW_CAPACITY;
if(n == capacity)
    return; // The allocated memory is already the right size
if(n < used)
    n = used;
NEW_CAPACITY = new size_t[n];
copy(digits, digits + used, NEW_CAPACITY);
delete[] digits;
    digits = NEW_CAPACITY;
capacity = n;

任何帮助都非常感谢

如果你正在使用c++语法编写C代码-那么使用C方法:reallocmalloc

如果你正在写c++代码-使用std::vector而不是数组。

你所指的循环是一个简单的计算:

while(current<required) {
    current = 2*current;
}
new_digits = realloc(digits, current);
// check that the allocation succeeded, handle errors, no need
// to copy data - realloc does that for you.

"我试图找出如何实现以下代码,以便如果有东西被添加到超过容量的数组代码将创建一个新的数组,是2^n大(即40,80,160)。然而,我希望它有一个for循环,它将使数组变大2^n,直到新的容量大于输入的容量。"

首先,我认为你指的是2*n而不是2^n。

第二,为什么不像其他评论者说的那样使用std::vector ?

第三,我不完全理解你的问题,但听起来你想要这个:
int newCapacity = capacity;
while( newCapacity < n )
  newCapacity *= 2;

这看起来很微不足道,所以你能澄清你的问题吗?