C/Cpp / STL / vector 的 erase 会造成当前位置和之后的迭代器失效的疑问
生活随笔
收集整理的這篇文章主要介紹了
C/Cpp / 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!)
總結
以上是生活随笔為你收集整理的C/Cpp / STL / vector 的 erase 会造成当前位置和之后的迭代器失效的疑问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: recv 和 send 阻塞和非阻塞的区
- 下一篇: shared_ptr 循环引用问题以及解