跳至內容

Erase–remove慣用法

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

_ Erase–remove 慣用法'_ 是 C + + 程序設計語言常用的技術,用於在 C + + 標準模板庫容器中刪除元素。

動機

一个捷看的編程任務是對集合(collection)中刪除等於是某一值抑是滿足某一个標準的所有的元素。C + + 語言會當通過手寫循環完成這个任務。但是閣較好的辦法是使用 C + + 標準枋仔庫中的算法來實現。

` erase ` 用佇對一个集合中刪除一个元素,但是對數組的容器,如 ` vector `,儉佇被刪除元素了後的所有的元素攏需要向前徙振動以避免集合中有一个空位(gap)。 佇仝一容器當中濟擺調用產生了大量移動元素的開銷。

` algorithm ` 庫提供矣 ` remove ` 佮 ` remove _ if ` 算法。因為遮的算法運行佇咧兩个前向迵天代器確定的元素範圍頂頭,𪜶無底層容器抑是集合的具體智識。遮的算法並無從容器刪除元素,是共無「符合」刪除標準的元素徙去容器的尻川內底,並且保持遮的元素的對次序。該當算法一改通過數據範圍即可實現該目標。

因為無元素共你斂掉,因此容器 sài-sù 保持袂變。容器尾的元素攏是需要予人刣掉的,毋過𪜶的狀態無指定(unspecified state)。 ` remove ` 倒轉去一个迵天代器指向尾仔這需要用 ` erase ` 刪除的元素的第一个。

仝款的代誌(刪除幾个元素), 用容器的方法 ` erase ` 會致使幾若擺遍歷這个容器,每一擺遍歷時,共你斂掉元素了後的所有的元素攏著愛向前徙振動,其時間銷了較遠通過孤一改通過。

局限

erase–remove 慣用法袂當用返回 ` const _ iterator `(比如講:set)的容器。

` std : : remove ` 佮 ` std : : remove _ if ` 袂使保持予人刣掉的元素(無成 ` std : : partition ` , ` std : : stable _ partition `)。 所以,erase–remove 只會當用佇容器的元素是全值語義袂走出去資源泄露。

參考文獻