欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C++中關(guān)于set刪除的一些坑

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

前言

最近工作中需要使用平衡樹維護(hù)操作。遂調(diào)用了C++標(biāo)準(zhǔn)庫里的set,在確保解題思路沒有出錯(cuò)的情況下,我發(fā)現(xiàn)自己始終有一組樣例無法通過。在檢查了很久的細(xì)節(jié)并找了標(biāo)程對(duì)跑中間過程以后,我發(fā)現(xiàn)我在使用set做刪除的時(shí)候,迭代器發(fā)生了和我預(yù)想不一樣的變化。

我在一個(gè)函數(shù)中調(diào)用了set的erase操作來刪除某個(gè)迭代器,函數(shù)的傳入?yún)?shù)為要?jiǎng)h除的迭代器,類似如下

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

然后我在main中想要?jiǎng)h除一個(gè)迭代器,并左移一位或右移一位迭代器,類似如下

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

 //操作2
 now=aha.find(8);
 del(now);
 now++;
}

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

但理想很美好,現(xiàn)實(shí)有差距。在我用標(biāo)程對(duì)拍以后,我發(fā)現(xiàn)上述操作存在很大問題。

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

但當(dāng)我想要左右移位時(shí),經(jīng)測(cè)試發(fā)現(xiàn)不管你左移還是右移,他返回的都是刪除的迭代器在原set中的前一個(gè)位置。
也即

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

了解這個(gè)就好辦了,我預(yù)先存下我要?jiǎng)h除的位置,然后迭代器先更新,再調(diào)用刪除即可。

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

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

上一篇:引用numpy出錯(cuò)詳解及解決方法

欄    目:C語言

下一篇:javascript 兩種聲明函數(shù)的方式的分析

本文標(biāo)題:C++中關(guān)于set刪除的一些坑

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/1767.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有