c++ - 重新分配二维数组并删除旧的
问题描述
我有一个 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;
}
解决方案
谢谢你。那是一个很好的复习。我现在有这个功能来处理这一切。
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;
}
推荐阅读
- sql - 带有连接和 Where 子句的复杂 SQL 视图
- java - 当项目数超过 maxRowCount 属性时,JComboBox 的宽度会减小
- javascript - @react-google-maps/api “google is not defined” 在 UseEffect 挂钩中访问时出错
- c# - DNN / 2SXC / Razor / c# / 使用可重用 HttpClient 使用外部 API
- symfony - Symfony CollectionType 更新实体
- angular - 如何在Angular的自定义控件组件中触摸内部控件?
- javascript - 由 onclick 事件触发时游戏卡在第一帧
- flutter - Flutter - 如何在不运行类似 CustomPainter 绘制方法的情况下移动和缩放 Canvas 绘图?
- python - 如何仅从 DataFrame 上的 groupby 中获取第一行?
- amazon-cloudformation - 通过 Cloudformation 创建的 CloudWatch 警报 OKActions 属性的值必须是字符串列表类型