调整数组大小并添加元素c ++

时间:2018-06-17 18:55:04

标签: c++ arrays c++11 dynamic-arrays

嘿,我知道这很简单,但出于某种原因,我的时间比我想象的要艰难。我试图尝试的是,如果我的动态数组的大小等于其中的元素的实际数量(意味着它已满),那么我想将数组的大小加倍并添加元素

    int add_element(int *array, int size , int &count)
{
    int temp;
    cout << "What number do you want to add ? " << endl;
    cin >> temp;
    if(count = size)
    {
        copy(array, size);
        count++;
        array[count] = temp;
    }
    return count;
}

void copy(int *oldArr  , int size)
{
    int temp = size * 2;
    int *newArr = new int[temp];

    for (int i = 0; i < size; i++) 
    {
        newArr[i] = oldArr[i];

    }
    //delete[] oldArr;
    oldArr = NULL;
    oldArr = newArr;
    delete[] oldArr;

我遇到的问题是实际上并没有使数组的大小加倍,因为当我试图寻找元素时它只返回地址空间。 任何帮助都是值得赞赏的

*********** EDIT ********* 我继续做了这些改变,但我的阵列似乎仍然没有改变大小

void add_element(int* &array, int size , int &count)
{
    int temp;
    cout << "What number do you want to add ? " << endl;
    cin >> temp;
    if(count ==  size)
    {
        copy(array, size);
        count++;
        array[count] = temp;
    }

}

void copy(int* &oldArr  , int size)
{
    int temp = size * 2;
    int *newArr = new int[temp];

    for (int i = 0; i < size; i++) 
    {
        newArr[i] = oldArr[i];

    }

    delete[] oldArr;
    oldArr = newArr;

1 个答案:

答案 0 :(得分:1)

您的代码中存在多个错误。

首先,在add_element中你想测试项目数是否等于数组大小,而是你不小心覆盖count变量:

if(count = size)   // this assigns count

应替换为

if(count == size)

其次,删除新分配的数组而不是旧数组:

oldArr = newArr;
delete[] oldArr;    // this will effectively deallocate newArr

你应该改变这些行的顺序:

delete[] oldArr;    // it deletes oldArr
oldArr = newArr;    // and then points it to newArr

第三,按值将指针传递给数组。这样,当分配新数组时,您将无法将新数组的地址返回给函数的调用者。您应该通过引用传递数组指针,类似于count

int add_element(int* &array, int size, int &count)

void copy(int* &oldArr, int size)

第四,从函数count返回add_element两次:既作为返回值,又作为输入输出参数。虽然,这在技术上不是问题,但绝对没有必要。我建议您将add_element更改为void

<强>更新

最后,但并非至少,我忽略了第五个问题。与需要从函数返回新数组指针的方式类似,也必须对数组大小进行相同的处理。所以size应该通过引用传递,并且应该正确更新:

int add_element(int* &array, int &size, int &count)

void copy(int* &oldArr, int &size) {   // pass size by reference
    int temp = size * 2;

    // ...

    oldArr = newArr;
    size = temp;   // update size
}