程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中關於set刪除的一些坑

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

編輯:關於C++

C++中關於set刪除的一些坑。本站提示廣大學習愛好者:(C++中關於set刪除的一些坑)文章只能為提供參考,不一定能成為您想要的結果。以下是C++中關於set刪除的一些坑正文


前言

最近任務中需求運用均衡樹維護操作。遂調用了C++規范庫裡的set,在確保解題思緒沒有出錯的狀況下,我發現自己一直有一組樣例無法經過。在反省了很久的細節並找了標程對跑兩頭進程當前,我發現我在運用set做刪除的時分,迭代器發作了和我料想不一樣的變化。

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

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操作的函數原型及前往值。

總結

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved