这就是我定义图表的方式。这不是典型的图形,它特定于我要处理的问题类型。
class Vertex;
class Edge
{
public:
Vertex *org;
Vertex *dest;
bool dir;
};
struct Vertex{
int id;
vector<Edge> edges;
int weight;
};
struct Graph{
vector<Vertex> vertices;
};
我在图形中添加顶点时遇到问题。这就是我的做法
Graph* graph1;
Vertex* first = addVertex(0);
graph1->vertices.push_back(*first);
addVertex函数正常运行,但是如果您仍然要引用,这里是
Vertex* addVertex(int id){
Vertex*newVertex = new Vertex;
newVertex->id=id;
newVertex->weight=0;
return newVertex;
}
该函数在graph1-> vertices.push_back(* first);之前停止工作。
最佳答案
graph1
本身是一个统一的指针。因此,调用它的成员会导致程序崩溃。用new
运算符初始化它。
graph1 = new Graph();
// .......
delete graph1;
或使用诸如
std::unique_ptr
之类的智能指针来自动管理内存。