问问题
191 次
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 回答