C ++如何正确地分配用户定义类的2D向量

时间:2017-11-09 20:07:33

标签: c++ stdvector assignment-operator

我正在尝试使用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;
};

1 个答案:

答案 0 :(得分:1)

您有graph=vector<vector<Vertex>>(n,vector<Vertex>());的未定义行为。您尚未初始化n。试试这样:

int n = 10;
graph=vector<vector<Vertex>>(n,vector<Vertex>());