簡體   English   中英

比較迭代器和const_iterators

[英]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_iteratorMyMap::iterator

您的地圖const是否合格?

如果您的地圖是const限定符,則std :: map :: upper_bound將返回const迭代器,如果不是,則應返回一個迭代器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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