天天看點

[C/C++][2012-12-18] erase的傳回值會指向下一個節點

erase的傳回值會指向下一個節點

for(TStrMapIter iter= strmap.begin(); iter!= strmap.end();)

{

      if ("somevalue" == iter->second )

      {

           iter = strmap.erase(iter);

       }

       else

       {

           ++iter;

       }

}

1. 為什麼要每次計算 strmap.end(), 執行 erase後,其end值可能會變(不是所有STL都是用 連結清單、有些使用數組, 元素會位移)

2. for裡面的iter++要寫在else中,因為erase 成功後, 傳回下一個指針。

繼續閱讀