CSTL中remove和erase的區別

2021-03-11 05:47:59 字數 2236 閱讀 2289

1樓:匿名使用者

c++的stl通過iterator將container和algorithm分離,並通過functor提供高可定製性。iterator可以看作是一種契約,algorithm對iterator進行操作,algorithm很難對container進行直接操作,這是因為algorithm對container所知甚少,一段**,若未利用操作物件所知全部資訊,將難以達到效能之極,並伴隨其它種種折中現象。當然,這種「未知性」是必須的——algorithm對於真正的操作物件container不能做出太多假設,若假設過多,何來乙個algorithm可以作用若干不同container的妙舉,stl強大威力也將受損不少。

囉嗦幾句,開個小頭,轉入正題。 先給出幾個關於stl中erase和remove(remove_if等,下稱remove類函式)的事實,小小複習:

erase一般作為乙個container的成員函式,是真正刪除的元素,是物理上的刪除

作為演算法部分的remove類函式,是邏輯上的刪除,將被刪除的元素移動到容器末尾,然後返回新的末尾,此時容器的size不變化

部分容器提供remove類成員函式,那麼代表的是真正物理意義上的刪除元素

如果該容器是vector、string或者deque,使用erase-remove idiom或者erase-remove_if idiom

如果該容器是list,使用list::remove或者list:remove_if成員函式

如果該容器是乙個associative container,使用asso_con::erase成員函式或者remove_copy_if結合swap等方式

有一些比較特殊的容器具現,比如vector等,暫不考慮。

2樓:杜爺1號

c++ stl中的remove和erase函式曾經讓我迷惑,同樣都是刪除,兩者有什麼區別呢?

vector中的remove的作用是將等於value的元素放到vector的尾部,

vector中erase的作用是刪除掉某個位置position或一段區域(begin, end)中的元素,減少其size

list容器中的remove 成員函式,原型是void remove (const value_type& val);

他的作用是刪除list中值與val相同的節點,釋放該節點的資源。

而list容器中的erase成員函式,原型是iterator erase (iterator position);

作用是刪除position位置的節點。這也是與remove不同的地方。

考慮到list::erase是與位置有關,故erase還存在api: iterator erase (iterator first, iterator last);

對於set來說,只有erase api,沒有remove api。 erase 的作用是把符合要求的元素都刪掉。

(1) void erase (iterator position);

(2) size_type erase (const value_type& val);

(3) void erase (iterator first, iterator last);

綜上所述,erase一般是要釋放資源,真正刪除元素的,

而remove主要用在vector中,用於將不符合要求的元素移到容器尾部,而並不刪除不符合要求的元素。

c++ stl 中 remove 和 erase 的區別

3樓:匿名使用者

vector中的來remove的作用是將等於value的元素放到源vector的尾部,但並不減少vector的size

vector中erase的作用是刪除掉某個位置position或一段區域(begin, end)中的元素,減少其size

list容器中的remove 成員函式,原型是void remove (const value_type& val);

他的作用是刪除list中值與val相同的節點,釋放該節點的資源。

而list容器中的erase成員函式,原型是iterator erase (iterator position);

作用是刪除position位置的節點。這也是與remove不同的地方。

考慮到list::erase是與位置有關,故erase還存在api: iterator erase (iterator first, iterator last);

對於set來說,只有erase api,沒有remove api。 erase 的作用是把符合要求的元素都刪掉。

jquery empty方法和remove方法的區別

1 jquery empty方法 a 定義和用法 empty 方法從被選元素移除所有內容,包括所有文字和子節點。b 語法 selector empty 2 jquery remove方法 a 定義和用法 remove 方法移除被選元素,包括所有文字和子節點。該方法不會把匹配的元素從 jquery 物...

急急!自感和互感中, 物理 急急!自感和互感中

浙教版原話 自感是減慢電流的變化 我貌似沒看清 重新回答一遍 斷開之後,燈泡是轉由線圈進行供電的 那麼根據斷開開關產生的磁通量與線圈的電感強度就能算出 這個時候線圈作為短暫電源的時候能提供的電壓的大小 切斷電源的時候,如果電感很大,就會亮一下,比原來還亮,這時的電流比原來的電流大,然後電流逐漸減小,...

鄭州51中和70中哪個好,鄭州57中和16,19,51,73中,哪個好

如果你想考個好高中去51會比較好,想混個畢業證,去70好,不過兩個學校的重點班都是很好的,看你能不能考進去 師資各個方面來比較的話。70 好點,主要還是看你自己選擇 鄭州57中和16,19,51,73中,哪個好 初中的話57最強!號稱小八中!相當於鄭州前五名的學校 其次是19中,靠近市 幹部子弟比較...