2016-04-03 103 views
-1

我有這樣的構造Foreach循環使用指針

class Vertex 
{ 
    Vertex(); 
    ~Vertex(); 

    Edge* adjacencies; 
}; 

我想那裏是陣列鄰接的,但它不能建立。所以我創建了指針(Edge也是我創建的類)。

而我有這段代碼與foreach循環,必須迭代所有鄰接關係,但是,當然,它不編譯。

Vertex getted_vertex = vertexQueve.top(); 
for(Edge & e: getted_vertex.adjacencies) 
      { 
       Vertex v = Vertex(e._idFrom); 
      } 

我應該改變構造函數還是循環?

+0

使用'vector'。 –

+1

使用'std :: vector',你可以擁有你想要的數組。 – StoryTeller

回答

2

只需使用:

class Vertex 
{ 
public: 
    Vertex(); 
    ~Vertex(); 

    std::vector<Edge> adjacencies; 
    // or std::vector<Edge*> adjacencies; 
}; 

填充它,像:

Vertex vertex; 
vertex.adjacencies.push_back(Edge()); 
// or vertex.adjacencies.push_back(new Edge()); 

後來,反覆鄰接:

Vertex vertex; 
for (std::vector<Edge>::const_iterator edge = vertex.adjacencies.begin(); 
     // or std::vector<Edge*>::const_iterator edge = vertex.adjacencies.begin(); 
     edge != vertex.adjacencies.end(); 
     ++edge) 
{ 
    Edge& edgeRef = *edge; 
    // simply use edgeRef 

    // or Edge* edgePtr = *edge; 
} 

如果vector存儲Edge*,您可能需要到delete他們從Vertex析構函數。

+1

作爲OP的願望,您仍然可以在這裏使用foreach/range。 –

2

你需要你的構造函數和析構函數是public併爲您的邊緣的容器,是這樣的:

class Vertex 
{ 
public: 
    Vertex(); 
    ~Vertex(); 
private: 
    vector<Edge> adjacencies; 
}; 
0

月1日,你必須把析構函數,構造函數在公共空間和「adjancencies」私人空間。要創建一個動態數組,你必須首先考慮它的大小。然後使用以下語句:

adjancencies = new Edge [i] l; //我指的是動態一維數組的大小。