我正在尝试使用2D矢量生成图形,其中我将放置我定义的Vertex对象的实例。
相关代码在这里:
...
vector<vector<Vertex>> graph;
Vertex start;
int q;
cin >> q;
for(int a0 = 0; a0 < q; a0++){
int n;
graph=vector<vector<Vertex>>(n,vector<Vertex>());
int m;
cin >> n >> m;
for(int a1 = 0; a1 < m; a1++){
int u;
int v;
cin >> u >> v;
graph[u].push_back(Vertex(v));
graph[v].push_back(Vertex(u));
}
...
}
...
}
我没有在声明期间初始化图形,而是希望根据我将得到的n
值使用赋值来生成图形。由于Vertex类中没有动态分配的成员,我认为将使用默认构造函数和默认值,并且在执行此赋值时不会有任何问题,但在运行时我会遇到分段错误。
错误是由于这一行:graph[u].push_back(Vertex(v));
我检查了访问graph[u]
没有问题。它在调用push_back
方法时出错。
我认为这应该有效,但我无法弄清楚它为什么没有。有人可以帮我解决这个问题吗?
如果需要,我的Vertex类:
class Vertex
{
public:
Vertex()
{
value=0;
distance=1000000;
color=char('w');
}
Vertex(int x)
{
value=x;
distance=1000000;
color=char('w');
}
int value;
int distance;
char color;
};
答案 0 :(得分:1)
您有graph=vector<vector<Vertex>>(n,vector<Vertex>());
的未定义行为。您尚未初始化n
。试试这样:
int n = 10;
graph=vector<vector<Vertex>>(n,vector<Vertex>());