c++ - 这两种动态扩展数组的方法有什么区别?

标签 c++ arrays pointers dynamic

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

方法一。

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/

相关文章:

c# - 从 C++ 升级到 C#

c++ - 计算内存使用情况?

c++ - boost::chrono 纳秒 Windows 7

javascript - JSON 解析文件返回字符串而不是 node/express 中的数组

C Struct & Strcpy,点运算符是否解析为指针

c++ - 在使用 stop_token 等待条件变量_any 时是否需要拥有锁来请求停止?

javascript - 为什么计数器没有在我的循环中重置?

c# - 检查 C# BitArray 非零值的最快方法

arrays - 尝试仅将唯一元素添加到数组中

c - 如何释放被调用的指针而不从哈希表/链接列表中删除值?