C++ 什么';这两种动态扩展数组的方法有什么区别?

C++ 什么';这两种动态扩展数组的方法有什么区别?,c++,arrays,pointers,dynamic,C++,Arrays,Pointers,Dynamic,这两种方法试图在需要时动态扩展数组 方法1 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 <

这两种方法试图在需要时动态扩展数组

方法1

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;
整数计数=0;
整数;
int*intlist=新的int[size];
在>>数字;
而(!in.fail())
{
如果(计数==大小)
{
尺寸*=2;
int*temp=新的int[size];
for(int i=0;i>数字;
}
方法2

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;
}
int size=10;
整数计数=0;
整数;
int*intlist=新的int[size];
在>>数字;
而(!cin.fail())
{
如果(计数==大小)
{
int*temp=intlist;
intlist=新int[size*2];
对于(int i=0;i>number;
}
方法1完成后,数组temp会发生什么变化?是否需要释放
temp
的内存


我试图
delete[]temp;
并将其指向
NULL
,但它把我的
intlist
搞砸了。您的第一个示例使用
temp
保存新创建的数组,而您的第二个代码使用它保留对原始数组的引用

“方法1完成后,阵列临时会发生什么情况?”

它将被
intlist
进一步引用

在第一种情况下,您不能
删除[]temp;
,因为这样会使您没有任何有效的分配


在第二种情况下,
intlist
指针移动到
temp
,然后新分配另一个分配。
temp
用于深度复制内容,完成后删除



无论如何,您应该注意(如评论中所述),除了研究和学习的学术原因之外,还应该使用来解决此类问题。

您的第一个示例使用
temp
来保存新创建的数组,而您的第二个代码使用它来保留对原始数组的引用

“方法1完成后,阵列临时会发生什么情况?”

它将被
intlist
进一步引用

在第一种情况下,您不能
删除[]temp;
,因为这样会使您没有任何有效的分配


在第二种情况下,
intlist
指针移动到
temp
,然后新分配另一个分配。
temp
用于深度复制内容,完成后删除



无论如何,您应该注意(如评论中所述),除了研究和学习的学术原因之外,还应该使用来解决此类问题。

为什么不使用vector来解决这些问题呢?感谢您的回答,但他们并没有真正回答我的问题:(使用
std::vector
。这项工作做得更好。故事结束。(一旦你熟练使用标准库,你就可以自己探索这种内存管理)。为什么不使用vector为你做这件事呢?谢谢你的回答,但他们并没有真正回答我的问题:(使用
std::vector
。这项工作做得更好。故事结束。(一旦你熟练使用标准库,你就可以自己探索这种内存管理)。@Lockie很乐意帮忙。请看我关于你的
intlist
成员的笔记。@Lockie很乐意帮忙。请看我关于你的
intlist
成员的笔记。