首页 > 解决方案 > 重新分配二维数组并删除旧的

问题描述

我有一个 Graph 类,它跟踪各种顶点和边。当我添加一个顶点时,我想检查我T* labels[]的动态数组的容量,并在需要更多空间时将容量加倍。当需要更多空间时,我还将重新分配 2D 数组,以便我可以包含该新顶点边缘的必要信息。我在我的add_vertex函数中通过检查和比较顶点数与容量、调用resize_edges()以及resize_vertex()何时满足条件来执行此操作。

首先我调用resize_edges()并开始分配一个更大的二维数组,我从原始数组复制内容,然后将原始数组设置edges[][]为新的更大数组,称为bool_new,然后是 I delete [] bool_new。接下来,我对我的labels[]... 当我删除new_labels时,我的程序崩溃了。我做这一切正确吗?

 template <typename T>
 void Graph<T>:: resize_edges()
 {
    bool ** bool_new;

    int new_cap = capacity*2;
    bool_new = new bool*[new_cap];

    for(int i = 0; i < new_cap ; i++)
    {
       bool_new[i] = new bool[new_cap];
    }

    for(int i = 0; i < capacity; i++)
    {
       for(int j = 0; j < capacity; j++)
       {
          bool_new[i][j] = edges[i][j];
       }
    }


   edges = bool_new;


   for(int i = 0 ; i < capacity ; i++) 
   {
       delete[] bool_new[i]; 
   }
   delete [] bool_new;
 }

 template <typename T>
 void Graph<T>::resize_vertex()
 {
     T* new_labels;
     int new_cap = capacity*2;
     new_labels = new T[new_cap];

     for(int i = 0; i < capacity; i ++)
     {
         new_labels[i] = labels[i];
     }

   labels = new_labels;
   delete [] new_labels;
}

标签: c++arrays

解决方案


谢谢你。那是一个很好的复习。我现在有这个功能来处理这一切。

template <typename T>
 void Graph<T>:: resize()
{
    bool ** bool_new;
    T* new_labels;
    new_labels = new T[capacity*2];
    int new_cap = capacity*2;
   bool_new = new bool*[new_cap];

   for(int i = 0; i < new_cap ; i++)
   {
       bool_new[i] = new bool[new_cap];
   }

   for(int i = 0; i < capacity; i++)
   {
       for(int j = 0; j < capacity; j++)
      {
          bool_new[i][j] = edges[i][j];
      }
    }

   for(int i = 0; i < capacity; i ++)
   {
       new_labels[i] = labels[i];
   }

  for(int i = 0 ; i < capacity; i++)
  {
         delete[] edges[i];
  }

  delete [] edges;
  delete [] labels;

  edges = bool_new;
  labels = new_labels;
   capacity *= 2;
  }

推荐阅读