首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图将数组的大小调整为-1

试图将数组的大小调整为-1
EN

Stack Overflow用户
提问于 2019-12-06 05:04:46
回答 1查看 55关注 0票数 0

我试图调整另一个标题中的数组大小。我需要把当前的数组,并使其更小。这是我的头部处理调整大小的代码:

代码语言:javascript
复制
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;
    }

在另一个标题中,我只是简单地发送

代码语言:javascript
复制
array.resize(array.size() - 1);

我希望得到一个输出,如果我有一个具有{1,2,3,4,5}的数组,那么我的最终目标将是拥有一个具有{1,2,3,4}的数组。我得到了所有的错误,而不仅仅是一个持续的错误。

很抱歉,如果我的格式不是最好的,我还在学习。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-06 05:32:28

不管容量是变大还是变小,逻辑看起来都是这样的:

  1. 分配所需大小的新数组
  2. 将项目从数组复制到新数组,直到数组中没有简单的项或新数组已满为止。
  3. 自由阵列。
  4. 新数组上的点数组。

代码:

代码语言:javascript
复制
void resize(unsigned int newCap) // no need for reference here. 
                                 // No reference, no need for const
{
    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,对吗?如果不是,您确实需要了解三人规则(和朋友)。真的。这很重要。请相信我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59207169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档