好的,所以我正在创建一个 Graph 类,我希望能够在今年夏天晚些时候有空闲时间的时候运行算法并添加一个 gui。现在我有一个 adjList,它被实现为一个向量数组(每个顶点一个),每个向量都是一个指针列表,表示从每个相关顶点到其他顶点的边。它被声明为我的 Graph 类的受保护成员,如下所示:
std::vector <Node*> *adjList;
adjList = new std::vector<Node*>[V];
我有一个附带问题。现在在这里我有一个包含指针的向量数组(通过指针)。相反,如果这不是一个数组,而是一个指向单个节点指针向量的指针,那么我可以像这样调用构造函数:
adjList = new std::vector<Node*>(10);
这将允许我为向量中的动态数组指定默认大小,但似乎我无法调用构造函数,或者至少在我有数组时无法正确获取语法。
现在是我主要关心的问题。对于指针数组中的每个向量,我在 addVertex 方法中调用 new 运算符,为每个向量添加多个节点指针。现在我需要确保我正确处理所有这些的释放。我相信我对这在 C++ 中应该如何工作有所了解,但我知道指针很棘手,所以在我继续向这个代码库添加大量内容之前,我想找人看看。通过几次搜索,我找不到任何与我所拥有的非常相似的东西。这是我的释放:
for(int i =0; i < V; i++)
for (unsigned int j = 0; j < adjList[i].size(); j++)
delete adjList[i][j];
delete adjList;
这会释放所有内存吗?还有一种简单的方法可以让我确定这一点,例如。在调试时计算使用 new 分配了多少内存?
[编辑:更新/更多信息]
这是一个指向 Google Books 的链接,显示了我想要在伪代码中实现的算法之一。此版本的广度优先搜索在邻接列表(指针列表数组)上运行。由于使用邻接列表分配给每个节点的属性,因此必须使用指针。
我想在运行后将这些属性从存储到每个节点的 BFS 算法中保留下来。我知道可以通过其他方式做到这一点,也许是索引节点和使用并行数组来存储属性。但我希望拥有与此伪代码类似的代码(用于链接中的 BFS)。