尝试以-1调整数组大小

问题描述 投票:0回答:1

我正在尝试调整另一个标头中的数组的大小。我需要采用当前数组,并使其更小。这是我在标头处理中调整大小的代码:

void resize(const unsigned int & newCap = 0) {
        // first, copy over old array into temp location
        Type* newArray = new Type[Capacity];
        for (unsigned int i = 0; i < Capacity; i++)
            newArray[i] = array[i];

        // Remove the old array, create with new capacity, copy over values
        delete[] array;
        if (newCap == 0)
            array = new Type[Capacity * 2];
        else if (newCap > Capacity)
            array = new Type[newCap];
        for (unsigned int i = 0; i < newCap; i++) array[i] = newArray[i];

        // set the capacity
        if (newCap == 0)
            Capacity = Capacity * 2;
        else
            Capacity = newCap;

        delete[] newArray;
    }

在另一个标题中,我只是发送它

array.resize(array.size() - 1);

我希望得到一个输出,如果我有一个带有{1、2、3、4、5}的数组,我的最终目标是拥有一个带有{1、2、3、4}的数组。我遇到了各种各样的错误,而不仅仅是一个一致的错误。

[抱歉,如果格式化不是最好的,我仍在学习。

c++ arrays resize
1个回答
0
投票

无论容量变大还是变小,逻辑看起来都像这样:

  1. 分配所需大小的新数组
  2. 将项目从阵列复制到新阵列中,直到阵列中没有任何项目或新阵列已满。
  3. 免费数组。
  4. 将新数组指向数组。

使用代码:

void resize(const unsigned int & newCap = 0) 
{
    if (newCap == 0)
    {
         newCap = Capacity * 2;
    }
    Type* newArray = new Type[newCap];
    for (unsigned int i = 0; i < Capacity && i < newCap; i++)
    {
        newArray[i] = array[i];
    }
    delete[] array;
    array = newArray;
    Capacity = newCap;
}

我想我不能说服您使用std::vector,可以吗?如果没有,您确实需要了解std::vector。真。这一点很重要。相信我。

© www.soinside.com 2019 - 2024. All rights reserved.