Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 尝试将数组大小调整为-1_C++_Arrays_Resize - Fatal编程技术网

C++ 尝试将数组大小调整为-1

C++ 尝试将数组大小调整为-1,c++,arrays,resize,C++,Arrays,Resize,我正在尝试调整其他标题中的数组大小。我需要将当前阵列缩小一个。这是我在标题中处理大小调整的代码: 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

我正在尝试调整其他标题中的数组大小。我需要将当前阵列缩小一个。这是我在标题中处理大小调整的代码:

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;
    }
我希望得到一个输出,如果我有一个带有{1,2,3,4,5}的数组,我的最终目标是有一个带有{1,2,3,4}的数组。我会犯各种各样的错误,而不仅仅是一个错误


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

无论容量是变大还是变小,逻辑都是这样的:

  • 分配所需大小的新数组
  • 将项目从数组复制到新数组中,直到数组中并没有项目或新数组已满
  • 自由数组
  • 新阵列上的点阵列
  • 代码:

    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;
    }
    
    void resize(unsigned int newCap)//此处无需引用。
    //没有参考,不需要常量
    {
    如果(newCap==0)
    {
    新上限=容量*2;
    }
    Type*newArray=新类型[newCap];
    对于(无符号整数i=0;i

    我想我不能说服你使用它,是吗?如果没有,你真的需要知道。真正地这很重要。相信我。

    什么是容量?对不起,容量是指我的阵列可以容纳的容量。处理我的大小调整的标题类似于向量的工作方式。我想了解它们是如何工作的,所以我不依赖它们。另外,您不需要同时删除您创建的新数组和您拥有的数组。@user4581301您能再澄清一下吗?我不确定我是否遵循。@boyanhristov96我想我必须先删除数组,然后才能给它一个新的大小。另外,我知道我不需要删除newArray,但据我所知,在调用new时不删除是不好的做法。@user4581301I我尝试运行此命令,但我得到了一个C3892错误,“'newCap':无法分配给常量变量”。我想用std::vectors,但我试着教自己向量是如何工作的。谢谢你为我指出了这一点白痴。教我不要通过编译器运行示例。已修复。@user4581301它现在确实为我运行。然而,我得到了一个奇怪的错误,我的数组变成了{memory location,2,3,4,5}。不过,我的代码的其余部分可能会有其他问题,那个内存位置可能只是随机垃圾。确保没有(inti=1;i)的
    
    
    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;
    }