#include <iostream>
#include <vector>
using namespace std;
struct Neighbor
{
int index;
int weight;
Neighbor(int, int);
};
Neighbor::Neighbor(int index, int weight)
{
Neighbor::index = index;
Neighbor::weight = weight;
}
void addEdge(vector<vector<Neighbor> > &graph, int v1, int v2, int weight)
{
graph[v1].push_back(Neighbor(v2, weight));
graph[v2].push_back(Neighbor(v1, weight));
}
int main()
{
vector<vector<Neighbor> > graph;
vector<vector<Neighbor> > graphIterator;
graph[0].push_back(Neighbor(1, 5));
graph[0].push_back(Neighbor(3, 3));
graph[0].push_back(Neighbor(4, 2.5));
graph[1].push_back(Neighbor(0, 5));
graph[1].push_back(Neighbor(2, 3));
graph[2].push_back(Neighbor(1, 3));
graph[2].push_back(Neighbor(4, 2.5));
graph[2].push_back(Neighbor(3, 5));
graph[3].push_back(Neighbor(0, 3));
graph[3].push_back(Neighbor(2, 5));
graph[3].push_back(Neighbor(4, 2.5));
graph[4].push_back(Neighbor(0, 2.5));
graph[4].push_back(Neighbor(2, 2.5));
graph[4].push_back(Neighbor(3, 2.5));
return 0;
}
上面是我的代码,运行时似乎崩溃了。尽管声明矢量图似乎可以正常工作,但是即使我包含了我的第一个push_back语句,程序也会崩溃。有人可以建议我吗?
当graph[0].push_back(Neighbor(1, 5));
,graph
仍然为空时,它没有任何元素并graph[0]
通向UB。
您应该首先添加元素,例如:
graph.push_back(vector<Neighbor>()); // add one element
...
或者
vector<vector<Neighbor> > graph(5); // construct vector with 5 elements
或者
vector<vector<Neighbor> > graph;
graph.resize(5); // resize vector to contain 5 elements.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句