C++ 使用c+中的邻接列表在图中添加顶点+;
这就是我定义图表的方式。这不是一个典型的图表,它是特定于我正在处理的问题类型的C++ 使用c+中的邻接列表在图中添加顶点+;,c++,graph,adjacency-list,C++,Graph,Adjacency List,这就是我定义图表的方式。这不是一个典型的图表,它是特定于我正在处理的问题类型的 class Vertex; class Edge { public: Vertex *org; Vertex *dest; bool dir; }; struct Vertex{ int id; vector<Edge> edges; int weight; }; struct Graph{ vector<Vertex> vertic
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;
};
addVertex函数工作正常,但如果您仍要引用,请参见此处
Vertex* addVertex(int id){
Vertex*newVertex = new Vertex;
newVertex->id=id;
newVertex->weight=0;
return newVertex;
}
函数在graph1->顶点之前停止工作。向后推(*第一)
graph1
本身就是一个统一的指针。因此,调用它的成员会导致程序崩溃。使用new
操作符初始化它
graph1 = new Graph();
// .......
delete graph1;
或者使用智能指针(如
std::unique_ptr
)自动管理内存。除了未初始化的图形*graph1
,代码中还有另一个内存管理问题:
addVertex
在它自己的堆内存块中分配一个顶点。但是
graph1->vertices.push_back(*first);
首先将复制到graph1
的std::vector
管理的内存块中
<>我猜你是C++的新手,来自java或Python等其他语言。你应该阅读一本介绍性的C++书籍。与其他语言相比,C++中内存管理有很多陷阱和概念。不!只需声明图形1代码>。仅在必要时使用指针。@japreis一般来说,是的。但在这里,它实际上取决于graph1
的增长方式。
graph1->vertices.push_back(*first);