2016-04-03 87 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; //我指的是动态一维数组的大小。