特定容器演算法

2021-09-08 22:05:54 字數 1707 閱讀 7327

與其他容器不同,鍊錶型別list與forward_list定義了幾個成員函式形式的演算法,如下表所示。特別是,它們定義了獨有的sort、merge、remove、reverse和unique。通用版本的sort要求隨機訪問迭代器,因此不能用於list和forward_list,因為這兩個型別分別提供雙向迭代器和前向迭代器。

鍊錶型別定義的其他演算法的通用版本可以用於鍊錶,但代價太高。這些演算法需要交換輸入序列中的元素。乙個鍊錶可以通過改變元素間的鏈結而不是真正的交換它們的值來傳遞「交換」元素。因此,這些鍊錶版本的演算法的效能比對應的通用版本好很多。

注意:對於list和forward_list應該優先使用成員函式版本的演算法而不是通用演算法。

list和forward_list成員函式版本的演算法

這些操作都返回void

lst.merge(lst2)         將來自lst2的元素合併入lst。lst和lst2都必須是有序的。

lst.merge(lst2,comp)       元素將從lst2中刪除。在合併之後,lst2變為空。第乙個版本使用《運算子;第二個版本使用給定的比較操作

lst.remove(val)         呼叫erase刪除掉與給定值相等(==)或令一元謂詞為真的每個元素

lst.remove_if(pred)

lst.reverse()         反轉lst中元素的順序

lst.sort()           使用《或給定比較操作排序元素

lst.sort(comp)    

lst.unique()           呼叫erase刪除同一值的連續拷貝。第乙個版本使用==;第二個版本使用給定的二元謂詞

lst.unique(pred)

splice成員

鍊錶型別還定義了splice演算法。其描述見下表。此演算法是鍊錶資料結構所特有的,因此不需要通用版本。

list和forward_list的splice成員函式的引數

lst.splice(args)或flst.splice_after(args)

(p,lst2)        p是乙個指向lst中元素的迭代器,或乙個指向flst首前位置的迭代器。函式將lst2的所有元素移動到lst中p之前的位置或是flst中p之後的位置。將元素           從lst2中刪除。lst2的型別必須與lst或flst相同,且不能是同乙個鍊錶

(p,lst2,p2)        p2是乙個指向lst2中位置的有效的迭代器。將p2指向的元素移動到lst中,或將p2之後的元素移動到flst中。lst2可以是與lst或flst相同的鍊錶

(p,lst2,b,e)      b和e必須表示lst2中的合法範圍。將給定範圍中的元素從lst2移動到lst或flst。lst2與lst(或flst)可以是相同的鍊錶,但p不能指向給定範圍中元素

鍊錶特有的操作會改變容器

多數鍊錶特有的演算法都與其通用版本很相似,但不完全相同。鍊錶特有版本與通用版本間的乙個至關重要的區別是鍊錶版本會改變底層的容器。例如,remove的鍊錶版本會刪除指定的元素。unique的鍊錶版本會刪除第二個和後繼的重複元素。

類似的,merge和splice會銷毀其引數。例如,通用版本的remove將合併的序列寫給乙個給定的目的迭代器:兩個輸入序列是不變的。而鍊錶版本的merge函式會銷毀給定的鍊錶——元素從引數指定的鍊錶中刪除,被合併到呼叫merge的鍊錶物件中。在merge之後,來自兩個鍊錶中的元素仍然存在,但它們都已在同乙個鍊錶中。

特定容器演算法

與其他容器不同,鍊錶型別 list 和 forward list 定義了幾個成員函式形式的演算法 對於list和forward list,應該優先使用成員函式版本的演算法而不是通用演算法。鍊錶型別還定義了splice演算法,此演算法是鍊錶資料結構所特有的,因此不需要通用版本 多數鍊錶特有的演算法都與...

10 6 特定容器演算法

與其他容器不同,鍊錶型別list和 forward list定義了幾個成員函式形式的演算法,如下表所示。特別是,它們定義了獨有的sort merge remove reverse和unique。通用版本的sort要求隨機訪問迭代器,因此不能用於list和forward list,因為這兩個型別分別提...

足跡C primer 35 特定容器演算法

特定容器演算法 lst.merge lst2 將來自lst2的元素併入到lst。這兩個都必須是有序的。lst.merge lst2,comp 元素將從lst2刪除,第乙個版本使用 運算子,第二個版本使用給定的運算子 lst.remove lst2 呼叫erase刪除掉與給定值相等 或令一元謂詞為真的...