这种尝试动态调整数组大小的输出有什么问题?

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

我试图在C ++中动态调整数组大小并执行这些步骤,但输出与我放入数组的数字不匹配。首先,我创建一个更大的新数组,然后我复制原始数组的所有元素,然后我添加另一个元素到新数组,删除旧数组,并将旧数组的指针设置为新阵列。

我不确定是否应该返回指针,因为参数是通过引用传递的,对吗?

#include <iostream>

using namespace std;

void resize( int*, int, int );

int main()
{
        int *arr = new int[5];
        for( int i=0; i<5; i++ )
                arr[i] = i;
        for( int i=0; i<5; i++ )
                cout << arr[i];
        cout << endl;


        resize( arr, 5, 5 );
        for( int i=0; i<6; i++ )
                cout << arr[i] << endl;
        cout << endl;
        return 0;
}


void resize( int *arr, int size, int yes )
{
        int *newA = new int[size+1];
        for( int i=0; i<size; i++ )
        {
                cout << arr[i];
                newA[i] = arr[i];
        }
        delete [] arr;
        newA[size] = yes;
        arr = newA;
}

这是输出:

002340

但我希望新阵列为0 1 2 3 4 5

c++ arrays pointers dynamic null
1个回答
0
投票

您将arr值作为指针传递,而不是通过引用传递。我们可以通过添加resize来修改&以通过引用传递指针:

// Passes the pointer to 'arr' by reference
void resize(int*& arr, int size, int yes )
{
        int *newA = new int[size+1];
        for( int i=0; i<size; i++ )
        {
                cout << arr[i];
                newA[i] = arr[i];
        }
        delete [] arr;
        newA[size] = yes;
        arr = newA;
}

话虽这么说,标准库有一个内置的类已经做到了!它被称为std::vector,它的构建良好,与常规数组一样快(当您使用优化进行编译时),它会自动删除它分配的任何内存!

使用std::vector,原始代码如下所示:

int main()
{
    std::vector<int> arr(5); // Create a vector with 5 elements

    // Assign them
    for(int i=0; i<5; i++ )
        arr[i] = i;
    // Print them
    for( int i=0; i<5; i++ )
        cout << arr[i];
    cout << endl;

    // add the number 5 at the end of arr
    // resize happens automatically
    arr.push_back(5); 

    // The number 5 now appears at the end of the array
    for( int i=0; i<6; i++ )
        cout << arr[i] << endl;
    cout << endl;
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.