map::erase函數在不同版本stl中的差異
1. C++98和C++11標准
http://www.cplusplus.com/reference/map/map/erase/
2. pj stl(windows)
map::erase函數的windows實現版本(C++11標准)會返回一個map::iterator:
iterator map::erase(const_iterator _Where); iterator map::erase(const_iterator _First, const_iterator _Last); size_type map::erase(const key_type& _Keyval);
3. sgi stl(linux)
map::erase函數的linux實現版本(C++98標准)會返回一個void:
void map::erase(iterator __position); void map::erase(iterator __first, iterator __last); size_type map::erase(const key_type& __x);
map::erase函數的正確使用方式
map::erase函數的正確使用方式:
typedef std::map<int, int> KG_TestMap; typedef std::map<int, int>::iterator KG_TestMapIter; std::map<int, int> mapTest; for (KG_TestMapIter iter = mapTest.begin(); iter != mapTest.end();) { mapTest.erase(iter++); }
這種方法利用了后++的特性,執行mapTest.erase(iter++)語句分成了兩個過程:
• 后++操作將為當前iter保存一個副本tmp,然后遞增當前iter指向下一個元素,最后返回該副本tmp
• 調用map::erase函數,tmp所指向的元素。
// code in pj stl _Myiter operator++(int) { // postincrement _Myiter _Tmp = *this; ++*this; return (_Tmp); }
// code in sgi stl
_Self operator++(int)
{
_Self __tmp = *this;
_M_increment();
return __tmp;
}