我正在努力思考逻辑的工作原理。这个想法是动态分配内存,因为我不知道程序将经历多少次迭代,而且我不能使用向量。因此,这里是我到目前为止所拥有内容的抽象。我有一个do while循环,其中包含变量count
,它将用作数组的SIZE
。 update
将存储在数组中。我不知道的事情是如何更新数组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;
}
最佳答案
每次循环迭代时,您需要:
释放tempiPoint
的内存,因为它是在上一次迭代中动态分配的。
用iPoint
的当前大小重新分配它。
将iPoint
的数据复制到tempiPoint
。
释放iPoint
的内存,并以新的大小重新分配它。
将tempiPoint
的数据复制回iPoint
,然后将新值添加到iPoint
的末尾。
另外,请注意*(iPoint + count)
等效于iPoint[count]
(这是您应使用的语法)。
这似乎是家庭作业,因此我将实施留给您。
更好,更简单的解决方案(由Ben Voigt指出)是使tempiPoint
指向iPoint
的内存,重新分配iPoint
,使用iPoint
将数据传输回tempiPoint
然后释放内存。
关于c++ - 您如何动态扩展数组和更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27238755/