【问题标题】:Double size of dynamic array动态数组的两倍大小
【发布时间】:2018-11-26 20:51:35
【问题描述】:

我真的不确定为什么这不起作用。就像数组大小没有加倍一样。我确定我缺少一些简单的东西,但我无法弄清楚为什么它不能正常工作。

void add_element(int* &array, int &size , int &count)
{
    int tempp;
    cout << "What number do you want to add ? " << endl;
    cin >> tempp;
    int temp = size * 2;
    int *newArr;
    newArr = new int[temp];
    if(count ==  size)
    {
        for (int i = 0; i < size; i++)
        {
            newArr[i] = array[i];

        }
        size = temp;
        delete[] array;

        ++count;
        newArr[count] = tempp;

        array = newArr;
    }
}

【问题讨论】:

  • 就像数组大小没有加倍 -- 你怎么知道数组大小没有加倍?请发帖minimal reproducible example。
  • 您观察到什么行为?你期望什么? “我认为它不起作用”不是一个好的问题描述。
  • if (count == size) ... 不应该是 if (count

标签: c++ arrays c++11


【解决方案1】:

你的函数没有正确实现,甚至没有关闭。

你不应该在每次调用函数时分配一个新数组,只有在当前数组不足以存储用户号码时才分配一个新数组。

如果count 和size 不是相同的值,则说明您正在泄漏内存,并且您没有向现有数组中插入任何内容。

只有当count 和size 的值相同时,您才在触摸数组,但是当您将用户的号码存储到新数组中时,您将其存储在错误的索引处。

试试这个:

void add_element(int* &array, int &size, int &count)
{
    int number;
    cout << "What number do you want to add? " << endl;
    cin >> number;
    if (count == size)
    {
        int newSize = size * 2;
        int *newArr = new int[newSize];
        for (int i = 0; i < count; ++i)
        {
            newArr[i] = array[i];
        }
        delete[] array;
        array = newArr;
        size = newSize;
    }
    array[count] = number;
    ++count;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    • 2014-07-21
    相关资源
    最近更新 更多