[英]C++ vector::erase complains about overload resolution & deleted operator '=='
[英]Confusing about the overload resolution of map::erase()
我正在閱讀Nico的The C ++ Standard Library 2nd Edition書籍。 他在第343頁給我展示了map
的erase()
函數的示例:
std:map<std::string, float> coll;
// ...
for (auto pos = coll.begin(); pos != coll.end(); ) {
if (pos->second == value) {
pos = coll.erase(pos); // since C++ 11
// C++ 98
// coll.erase(pos++);
} else {
++pos;
}
}
而且cplusplus.com說:
void erase( iterator position ); // C++ 98
iterator erase( const_iterator position ); // C++ 11
我的問題是,上一個示例中的重載分辨率如何選擇C ++ 11版本,該版本返回上次刪除的元素的迭代器? pos
的類型在示例中是iterator
,不是嗎?
std::map<X>::iterator
被指定為可轉換為std::map<X>::const_iterator
,因此您可以將前者傳遞給期望后者的函數。
過載解析不需要在這兩個函數之間選擇,因為它們是互斥的:C ++ 98在C ++ 11中不可用,反之亦然。
以下是N3337標准草案[map]/2
C ++ 11中可用的std::map::erase
版本:
iterator erase(const_iterator position); size_type erase(const key_type& x); iterator erase(const_iterator first, const_iterator last);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.