【STL中的erase()方法 】

來源:互聯網
上載者:User

 STL中的容器按儲存方式分為兩類,一類是按以數組形式儲存的容器(如:vector 、deque);另一類是以不連續的節點形式儲存的容器(如:list、set、map)。在STL中用earse()方法刪除一個元素很簡單,基本上也不會出什麼錯,但是在遍曆刪除某條件下的元素時就有可能會弄錯了。在list、set、map、vector和deque遍曆刪除某條件元素時通用的一種方法可以這樣使用:

 std::list< int> List;   // 這裡也可以是set、map、vector和deque    std::list< int>::iterator iter = List.begin();    while( iter != List.end() )    {          if( /* 是否刪除的條件判斷 */ )          {             iter = List.erase( iter );          }          else             iter ++;    }

通過erase方法的傳回值來擷取下一個元素的位置。

對於list、map等節點形式的容器有人會用另一種方式:

while( iter != List.end() )    {          if( /* 是否刪除的條件判斷 */ )          {             List.erase( iter++ );          }          else             iter ++;    }

而有些人往往會誤用為:

while( iter != List.end() )    {          if( /* 是否刪除的條件判斷 */ )          {             List.erase( ++iter );          }          else             iter ++;    }

在這裡“++”運算子是被重載過的,與我們平常的理解剛好相反,erase( iter++) 是先擷取下一個元素的位置再刪除; erase( ++iter) 是刪除以後再擷取下一個元素的位置。

    為了不混淆“++”運算子,建議使用前面的通過erase方法的傳回值來擷取下一個元素的位置的方式來做遍曆刪除某些元素,這樣所有的STL容器還基本上可以共用,記起來也方便呢,呵...

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.