在图中使用迭代器时出错

时间:2014-03-16 22:52:10

标签: c++ graph stl

void Graph::removeEdge( int u , Edge e )
{
    for( std::list<Edge> iterator i = AdjList[u].begin() ;
                             i != AdjList[u].end() ;
                             ++i )
    {
        if( i->vertex() == e.vertex() )
        {
            AdjList[u].erase(i) ;
            break ;
        }
    }
}

我在graph类中使用过此函数,在编译过程中出现以下错误

|In member function ‘void Graph::removeEdge(int, Edge)’:|
|47|error: expected ‘;’ before ‘i’|
|47|error: ‘i’ was not declared in this scope|
|48|error: expected ‘)’ before ‘;’ token|
|49|error: ‘i’ was not declared in this scope|
|49|error: expected ‘;’ before ‘)’ token|
|59|error: expected ‘}’ at end of input|

,请帮帮我。

2 个答案:

答案 0 :(得分:1)

您不能在声明中使用两个变量名称或类型。您的编译器希望您只说std::list<Edge> iterator;。但是,您可能意味着这一点,因为iteratortypedef类中的std::list<Edge>

std::list<Edge>::iterator i = AdjList[u].begin();

但请注意,您可以使用std::find_if找到元素:

std::list<Edge>::iterator it = std::find_if(AdjList[u].begin(), AdjList[u].end(), 
    [&e](const Edge &edge) {return edge.vertex() == e.vertex();}
);

if (it != AdjList[u].end()) {
    AdjList[u].erase(it);
}

答案 1 :(得分:0)

问题是你在这里错过了::

for( std::list<Edge>::iterator i = AdjList[u].begin() ;