1
#include <bits/stdc++.h>

using namespace std;

class Graph
{
    int V;

public:
    Graph(int V)
    {
        this->V = V;
    }
    vector<list<int>> adj_list(V);

    void add_edge(int u, int v)
    {
        adj_list[u].push_back(v);
        adj_list[v].push_back(u);
    }
};

我正在尝试使用 Graph 类制作邻接列表。但是我收到以下错误:

成员 "Graph::V" 不是类型名称

我想成为我创建的sV的大小。vectorlist

请帮我找出我的错误。

4

2 回答 2

2

您无法在尝试时神奇地调整大小。该adj_list成员应在初始化列表中并正确构造:

class Graph{
    
    int V;
    std::vector<std::list<int>> adj_list;

public:
    Graph(int v)
        : V(v)
        , adj_list(v) // <<===== here
    {
    }
    
    void add_edge(int u, int v){
        adj_list[u].push_back(v);
        adj_list[v].push_back(u);
    }
};
于 2020-10-20T10:01:49.963 回答
1

表达方式:

vector<list<int>> adj_list(V);

该参数不正确,您可以像这样使用容器的初始化器列表:

vector<list<int>> adj_list{V};

但是,它仍然V是未初始化的,它的值在构造时是未定义的,正如WhozCraig 指出的那样,它们都属于对象初始化器列表。

于 2020-10-20T10:03:29.373 回答