带指针的Foreach循环

时间:2016-04-03 08:29:21

标签: c++

我有这个构造函数

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

    Edge* adjacencies;
};

我希望有相邻的数组,但它无法构建。所以我创建了指针(Edge也是我创建的类)。

我有这段代码的 foreach循环必须遍历所有邻接,但是,当然,它不会编译。

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

我应该更改构造函数还是循环?

3 个答案:

答案 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数组的大小。