[英]Comparing iterator and const_iterators
我有一个方法可以找到地图中的特定位置,并通过迭代器引用“返回”该位置:
bool Func(const int searchKey, MyMap::iterator& iter) const {
iter = _map.upper_bound(searchKey); // Compiler error: comparing non-const iterator and const iterator
const bool found = iter != _map.begin();
if(something){
--_map;
return true;
}
return false;
}
我收到一个编译器错误,因为std::upper_bound()
返回一个std::const_iterator
并将其与std::iterator
进行比较。
我应该“铸造” upper_bound()
的返回值是非常量吗?
不,您不应该upper_bound
的返回值。 您应该删除const
上的const
限定词。 该函数提供对地图元素的非常量访问(通过out参数),因此不应为const。
bool Func(const int searchKey, MyMap::iterator& iter) const { iter = _map.upper_bound(searchKey); // Compiler error: comparing non-const iterator and const iterator
该方法被标记为const
,但是您将使用非 const
迭代器( iter
参数)在_map
中返回位置,从而使调用者对地图元素具有非 const访问权限,从而违反了const
方法的规范。
从Func
声明中删除const
,或返回MyMap::const_iterator&
,具体取决于您希望给予调用者对地图元素的哪种访问方式。
或者,您可以为Func
写两个重载:一个const
重载和一个非const
重载,分别返回MyMap::const_iterator
和MyMap::iterator
。
您的地图const是否合格?
如果您的地图是const限定符,则std :: map :: upper_bound将返回const迭代器,如果不是,则应返回一个迭代器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.