如何动态扩展阵列和更新?

时间:2014-12-01 22:44:20

标签: c++ arrays

我试图围绕逻辑如何运作。我的想法是动态分配内存,因为我不知道程序将经历多少迭代,我不能使用向量。所以这是我迄今为止所拥有的东西的抽象。我有一个while循环,其中包含变量count,它将充当数组的SIZEupdate将存储在数组中。我无法弄清楚的是如何更新数组iPoint而不会产生无限量的if else语句。我知道有一种更好的方法,但在这一点上,我的大脑是油炸的。

#include <iostream>
#include <string>


using namespace std;


int main()
{

    int iTickets, count = 0, update = 0;
    int *tempiPoint = NULL;
    int *iPoint = NULL;

    do
    {
        count++;
        update++;


        if (count == 1)
        {


            tempiPoint = new int[count];
            for (int i = 0; i < count; i++)
            {
                *(tempiPoint + i) = update;
            }

        }
        else if (count > 1)
        {


            iPoint = new int[count];
            for (int i = 0; i < count; i++)
            {
                *(iPoint + i) = *(tempiPoint + i);

            }
            *(iPoint + count) = update;


        }

    } while (count != 10);
    for (int i = 0; i < count; i++)
    {
        cout << *(iPoint + i);
}
    delete[] tempiPoint;
    delete[] iPoint;
    return 0;
}

1 个答案:

答案 0 :(得分:0)

每次循环迭代时,您需要:

  1. 免费tempiPoint的内存,因为它是在前一次迭代中动态分配的。
  2. iPoint的当前大小重新分配。
  3. iPoint的数据复制到tempiPoint
  4. 免费iPoint内存并使用新尺寸重新分配。
  5. tempiPoint的数据复制回iPoint,然后将新值添加到iPoint的末尾。
  6. 另请注意,*(iPoint + count)等同于iPoint[count](这是您应该使用的语法)。

    这似乎是作业,所以我将实施留给你。

    一个更好更简单的解决方案(Ben Voigt的评论中指出)就是让tempiPoint 指向iPoint的内存,重新分配iPoint,使用iPoint将数据传回tempiPoint,然后释放内存。