STL / vector 的 erase 會造成當前位置和之後的迭代器失效的疑問

erase 其中一種實現

(來源:cygnus 2.91.57,github:https://github.com/xuchanglong/Cygnus-comments

    iterator erase(iterator position)
    {
        if (position + 1 != end())
            copy(position + 1, finish, position);
        // 使得 finish 指向多餘的那個元素。
        // 同時也保證了 finish 始終位於有效數據的下一位。
        --finish;
        // 刪除該多雨位置的內存。
        destroy(finish);
        return position;
    }

因爲,該函數的功能主要是將 position 之後的數據覆蓋到以 position 爲開始的內存中。整個函數完事之後,傳入的指針 position 和返回的 position 是沒有改變的,所以該函數沒有網上說的執行了 erase 之後,position 之後的迭代器會失效的問題,可能和其實現有關係。

 

(SAW:Game Over!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章