2016-10-20 6 views
-1

隣接リストを使用してグラフを実装しようとしています。 リストのベクトルを使用していますが、コードはコンパイルされていません。隣接リストを実装するためのC++のリストのベクトル

class Graph 
{ 
    public: 
     vector<list<int> > adj; 
     int V; 
     int E; 

     Graph(int N); 
     void addEdge(int u, int v); 
}; 

Graph::Graph(int N) 
{ 
    adj = new vector<list<int> >(N+1); 
} 

void Graph::addEdge(int u, int v) 
{ 
    adj[u].push_back(v); 
} 
+1

にも述べなければどのコンパイラエラーあなたにこの質問は、将来の参照のためにも検索することはできません。 –

答えて

1

vector<list<int> > adj;はあなたのGraphのメンバオブジェクトを定義します。初期化にはnewを使用する必要はありません(これはJavaではありません)。メンバーイニシャライザリストのベクトルc'torを呼び出すだけです。

Graph::Graph(int N) : adj(N+1) 
{ 
} 
1

C++はJavaまたはC#ではありません。新しいオブジェクトを作成するのに、newを使用する必要はありません。

代わりに構造メンバー初期化子リストを使用adjメンバー:

Graph::Graph(int N) 
    : adj(N + 1) 
{ 
} 
1

newを使用すると、ポインタに割り当てる必要があります。私はそれが今も元気にコンパイルするように、あなたのコード変更:

class Graph 
{ 
    public: 
     vector<list<int> > * adj; 
     int V; 
     int E; 

     Graph(int N); 
     void addEdge(int u, int v); 
}; 

Graph::Graph(int N) 
{ 
    adj = new vector<list<int> >(N+1); 
} 

void Graph::addEdge(int u, int v) 
{ 
    (*adj)[u].push_back(v); 
} 

編集を他の人が指摘したように、それは良いでしょう

だけで行うには:

class Graph 
{ 
public: 
    vector<list<int> > adj; 
    int V; 
    int E; 

    Graph(int N) : adj(N+1) {} 
    void addEdge(int u, int v); 
}; 

void Graph::addEdge(int u, int v) 
{ 
    adj[u].push_back(v); 
} 

int main() 
{ 
    return 0; 
} 
関連する問題