簡體   English   中英

對map :: erase()的重載分辨率感到困惑

[英]Confusing about the overload resolution of map::erase()

我正在閱讀Nico的The C ++ Standard Library 2nd Edition書籍。 他在第343頁給我展示了maperase()函數的示例:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM