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

时间:2011-09-21 06:45:16

标签: c++ arrays pointers dynamic-memory-allocation

所以我有一个名为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;

非常感谢任何帮助

2 个答案:

答案 0 :(得分:0)

如果您使用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.

进行。

答案 1 :(得分:0)

“我正在试图弄清楚如何实现以下代码,以便如果某个内容添加到超出容量的数组中,代码将创建一个大2 ^ n的新数组(即40, 80,160)。但是我希望它有一个for循环,它会使数组2 ^ n变大,直到新容量大于输入的数量。“

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

其次,为什么不像其他评论者那样使用std :: vector?

第三,我不完全理解你的问题,但听起来你想要这个:

int newCapacity = capacity;
while( newCapacity < n )
  newCapacity *= 2;

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