[英]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.