使用C 中的邻接列表在图中添加顶点
Adding of a vertex in graph using adjacency-list in c++
这就是我定义图形的方式。这不是典型的图表,它特定于我要处理的问题类型。
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
这样的智能指针自动管理内存。
除了非初始化的Graph* graph1
,您的代码中还有另一个内存管理问题:
addVertex
在其自己的堆内存块中分配一个Vertex
。但是
graph1->vertices.push_back(*first);
副本 first
进入由graph1
的std::vector
管理的内存块。
我想您是来自Java或Python等另一种语言的C 的新手。您应该阅读一本介绍性C 书。与其他语言相比,C 中的内存管理具有许多陷阱和概念。
相关文章:
- 如何在 sqlite3 中的表中添加整数列表
- 有什么方法可以将元素添加到列表中,如图所示?
- 测试驱动开发 c++:如何将对象添加到向量中,将歌曲添加到播放列表并对其进行测试
- 将新元素添加到列表中,并返回对该元素的引用?
- 可视化 如何将 CString 值列表添加到 MFC C++ 中的组合框中?
- 通过在带有 C++ 的列表中添加连续元素来计算新的整数列表
- CSUF EPP - 你有什么想法(在添加到链接列表末尾时遇到麻烦)
- 将集合的随机元素添加到列表中,然后将其从原始集合中移除
- 如何使用LLVM C++API向保留节点列表添加
- 是否可以使用OpenMP并行化一个列表,该列表可以在每次迭代中添加新元素
- 如何确保我的节点被添加到链接列表中
- 如何读取文件的内容,如果文件中的单词重复,请将它们添加到列表中?
- 在 MFC 组合框中设置文本,而不将其添加到列表中
- 在C++中,如何将参数添加到"Args&&... args"参数列表中?
- C++将静态多态类自添加到子类的 constexpr 列表中
- 添加气泡排序代码以排列列表
- 双链接列表添加元素不起作用,不知何故它总是保持为空
- 如何从列表中将对象添加到图表中?
- 在运行时添加列表和从列表中删除
- MFC应用程序在添加列表控件元素时卡住