国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中關于set刪除的一些坑

2020-05-23 13:54:18
字體:
來源:轉載
供稿:網友

前言

最近工作中需要使用平衡樹維護操作。遂調用了C++標準庫里的cript/57038.html">set,在確保解題思路沒有出錯的情況下,我發現自己始終有一組樣例無法通過。在檢查了很久的細節并找了標程對跑中間過程以后,我發現我在使用set做刪除的時候,迭代器發生了和我預想不一樣的變化。

我在一個函數中調用了set的erase操作來刪除某個迭代器,函數的傳入參數為要刪除的迭代器,類似如下

class="jb51code">
set<int> aha; void del(set<int>::iterator it){ //一頓操作 aha.erase(it);}

然后我在main中想要刪除一個迭代器,并左移一位或右移一位迭代器,類似如下

int main(){ set<int>::iterator now; //一頓操作  //操作1 now=aha.find(5); del(now); now--; //操作2 now=aha.find(8); del(now); now++;}

上面是我原來的寫法,刪除這個迭代器所在的位置,然后移位。

但理想很美好,現實有差距。在我用標程對拍以后,我發現上述操作存在很大問題。

使用erase操作刪除一個迭代器以后,我訪問該迭代器,他仍舊是原來的值。

但當我想要左右移位時,經測試發現不管你左移還是右移,他返回的都是刪除的迭代器在原set中的前一個位置。
也即

set<int>::iterator now=aha.find(8);del(now);/*現在--now和++now都是同一個位置為未刪除now的set中,now的前一個位置*/

了解這個就好辦了,我預先存下我要刪除的位置,然后迭代器先更新,再調用刪除即可。

這個主要還是對STL不夠熟悉造成的,為此,我后來還去翻閱了set中erase操作的函數原型及返回值

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 麦盖提县| 丹巴县| 京山县| 高唐县| 青海省| 灵宝市| 齐齐哈尔市| 屯门区| 柘荣县| 彭泽县| 宣威市| 霍邱县| 青田县| 泗水县| 钦州市| 宁阳县| 工布江达县| 朔州市| 宜川县| 沧州市| 阳谷县| 高阳县| 红安县| 柞水县| 大港区| 多伦县| 鹰潭市| 淮滨县| 伊川县| 板桥市| 德格县| 南溪县| 从化市| 青浦区| 收藏| 武宣县| 西林县| 军事| 芒康县| 曲沃县| 高州市|