我有这个构造函数
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 :(得分: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;
}
如果在Edge*
中存储vector
,您可能需要delete
来自Vertex
析构函数。
答案 1 :(得分:2)
你需要构造函数和析构函数为public
和边缘的容器,如:
class Vertex
{
public:
Vertex();
~Vertex();
private:
vector<Edge> adjacencies;
};
答案 2 :(得分:0)
1,你必须在公共空间放置析构函数,构造函数和私有空间中的“adjancencies”。要创建一个动态数组,你必须先把它的大小。然后使用这句话:
adjancencies = new Edge [i] l; // i指的是动态1D数组的大小。