2
4

5 回答 5

5

你应该使用const_iterator

 list<unsigned int>::const_iterator itS;
 list<unsigned int>::const_iterator itE;
于 2013-05-30T19:30:00.857 回答
2

我只是通过引用传递一个列表

不,您通过 const 引用传递它。您const的参数和迭代器之间不匹配。

更改函数签名:

void endConditionalFlowsBetweenSets(
    list<unsigned int>& sourceSet,
    list<unsigned int>& endSet);

或更改迭代器声明:

 list<unsigned int>::const_iterator itS;
 list<unsigned int>::const_iterator itE;
于 2013-05-30T19:32:19.343 回答
1

您的列表sourceSet是 const,但您正在尝试创建一个非常量迭代器。如果你能做到这一点,你就可以修改列表,这不好,因为列表是const.

这就是为什么你应该使用list<unsigned int>::const_iterator.

于 2013-05-30T19:31:18.100 回答
0

如果您只是使用auto并让编译器找到适当的类型,那么整个问题就不会发生:

for(auto itS=sourceSet.begin(); itS!=sourceSet.end(); itS++)
    for(auto itE=endSet.begin(); itE!=endSet.end(); itE++)
        if(*itS!=*itE && linkIndex[*itS][*itE].index==-1)   
            endFlow(*itS,*itE);

您还可以考虑循环的范围

for(auto src : sourceSet)   // src is unsigned int
    for(auto&end : endSet)  // end is unsigned int&  allows manipulation in endFlow
        if(src != end && linkIndex[src][end].index==-1)
           endFlow(src,end);
于 2013-10-05T10:00:33.847 回答
0

您需要使用const_iterator

list<unsigned int>::const_iterator itS;
list<unsigned int>::const_iterator itE;

你正在传递,sourceSet所以const你不能使用非const迭代器。

于 2013-05-30T19:31:54.183 回答