std map erase的用法及陷阱

2021-09-09 07:55:29 字數 898 閱讀 5037

方法一:

[cpp]view plain

copy

std::mapmaptest;  

bool testval(const std::string & val);  

......  

std::map::iterator it = maptest.begin();  

while(it != maptest.end())  

else  

it++;  

}  ...........  

在這種方式中,通過std::map的erase方法在釋放了it後會返回指向下乙個元素的指標來獲取最新的iterator

方法二:

[cpp]view plain

copy

std::mapmaptest;  

bool testval(const std::string & val);  

......  

std::map::iterator it = maptest.begin();  

while(it != maptest.end())  

else  

it++;  

}  ...........  

該方法中利用了後++的特點,這個時候執行maptest.erase(it++);這條語句分為三個過程

1、先把it的值賦值給乙個臨時變數做為傳遞給erase的引數變數

3、再呼叫erase函式,釋放掉第一步中儲存的要刪除的it的值的臨時變數所指的位置。

如果只是maptest.erase(it); 當這條語句執行完後,it就是乙個非法指標,如果再執行++就會出錯

總結,對於iter的移動在對erase時需要注意。

std map erase的用法及陷阱

方法一 std mapmaptest bool testval const std string val std map iterator it maptest.begin while it maptest.end else it 在這種方式中,通過std map的erase方法在釋放了it後會返回...

typedef的用法及建構函式的用法

主要用法給資料型別新加乙個名字 例一 例二,include typedef int zhangsan 為int再重新多取乙個名字,zhangsan等價於int typedef struct student st 為struct student重新多取乙個名字,叫st int main include...

explicit的用法及意義

c 中的explicit關鍵字用來修飾類的建構函式,表明該建構函式是顯式的,既然有 顯式 那麼必然就有 隱式 那麼什麼是顯示而什麼又是隱式的呢?如果c 類的建構函式有乙個引數,那麼在編譯的時候就會有乙個預設的轉換操作 將該建構函式對應資料型別的資料轉換為該類物件,如下面所示 class myclas...