C++ 的 STL -在迴圈中刪除 iterator

C++ 的 STL -在迴圈中刪除 iterator (iterator erase in loop)

在任何的迴圈中刪除元素都是一件非常危險的事情,包含最簡單的陣列。因為刪除元素後,迴圈有可能會找不到下一個元素,迴圈就會當機,所以都要用一些特殊的方法去處理。

而在 C++ STL 的容器迴圈中刪除元素可以使用以下的特殊方法。

Sequence containers (序列容器) : vector、string、deque、list

for (it = c.begin(); it! = c.end(); )
{
        if (is need delete)
            it = c.erase(it);
        else
            it++;
}

Associative containers (關連式容器) : set、multiset、map、multimap

for (it = c.begin(); it! = c.end(); )
{
        if (is need delete)
            c.erase( it++ );// it++ 是 operator 有回傳值 
        else
            it++;
}

小提醒:STL map 的 erase() 在 visual c++ 與 linux gcc 下可能有差異,使用前還是要測試一下。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *