这两种方法都试图在需要时动态扩展一个数组。
方法一。
int size = 10;
int count = 0;
int number;
int* intlist = new int[size];
in >> number;
while (!in.fail())
{
if (count == size)
{
size *= 2;
int* temp = new int[size];
for (int i = 0; i < count; i++)
{
temp[i] = intlist[i];
}
delete[] intlist;
intlist = temp;
}
intlist[count] = number;
count++;
in >> number;
}
方法二
int size = 10;
int count = 0;
int number;
int* intlist = new int[size];
in >> number;
while(!cin.fail())
{
if ( count == size )
{
int* temp = intlist;
intlist = new int[size*2];
for ( int i=0;i<size; i++)
intlist[i] = temp[i];
delete [] temp;
size = size * 2;
temp = NULL;
}
intlist[count] = number;
count++;
in >> number;
}
方法 1 完成后数组 temp 会发生什么变化?是否需要释放temp
的内存?
我试过 delete[] temp;
并将其指向 NULL
但它弄乱了我的 intlist
。
最佳答案
您的第一个示例使用 temp
保存新创建的数组,而您的第二个代码使用它来保存对原始数组的引用。
"What happens to array temp after method 1 is done?"
它将被 intlist
引用进一步。
在第一种情况下你不能delete [] temp;
因为它会让您得不到任何有效分配。
在第二种情况下 intlist
指针移动到 temp
,然后新分配了另一个分配。 temp
用于深拷贝内容,完成后删除。
无论如何,您应该注意(如评论中所述),除了研究和学习的学术原因外, std::vector<int> intlist;
应该用来解决这类问题。
关于c++ - 这两种动态扩展数组的方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29546856/