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中,靠近市 幹部子弟比較...