與其他容器不同,鍊錶型別list和 forward_list定義了幾個成員函式形式的演算法,如下表所示。特別是,它們定義了獨有的sort、merge、remove、reverse和unique。
通用版本的sort要求隨機訪問迭代器,因此不能用於list和forward_list,因為這兩個型別分別提供雙向迭代器和前向迭代器。
鍊錶型別定義的其他演算法的通用版本可以用於鍊錶,但代價太高。這些演算法需要交換輸入序列中的元素。乙個鍊錶可以通過改變元素間的鏈結而不是真的交換它們的值來快速「交換」元素。因此,這些鍊錶版本的演算法的效能比對應的通用版本好得多。
對於list和forward_list,應該優先使用成員函式版本的演算法而不是通用演算法。鍊錶特有的操作會改變元素:
多數鍊錶特有的演算法都與其通用版本很相似,但不完全相同。鍊錶特有版本與通用版本間的乙個至關重要的區別是鍊錶版本會改變底層的容器。
例如,remove 的鍊錶版本會刪除指定的元素。unique 的鍊錶版本會刪除第二個和後繼的重複元素。
類似的,merge和splice會銷毀其引數。
例如,通用版本的merge將合併的序列寫到乙個給定的目的迭代器;兩個輸入序列是不變的。而鍊錶版本的merge 函式會銷毀給定的鍊錶——元素從引數指定的鍊錶中刪除,被合併到呼叫merge 的鍊錶物件中。在merge之後,來自兩個鍊錶中的元素仍然存在,但它們都已在同乙個鍊錶中。
特定容器演算法
與其他容器不同,鍊錶型別list與forward list定義了幾個成員函式形式的演算法,如下表所示。特別是,它們定義了獨有的sort merge remove reverse和unique。通用版本的sort要求隨機訪問迭代器,因此不能用於list和forward list,因為這兩個型別分別提供...
特定容器演算法
與其他容器不同,鍊錶型別 list 和 forward list 定義了幾個成員函式形式的演算法 對於list和forward list,應該優先使用成員函式版本的演算法而不是通用演算法。鍊錶型別還定義了splice演算法,此演算法是鍊錶資料結構所特有的,因此不需要通用版本 多數鍊錶特有的演算法都與...
足跡C primer 35 特定容器演算法
特定容器演算法 lst.merge lst2 將來自lst2的元素併入到lst。這兩個都必須是有序的。lst.merge lst2,comp 元素將從lst2刪除,第乙個版本使用 運算子,第二個版本使用給定的運算子 lst.remove lst2 呼叫erase刪除掉與給定值相等 或令一元謂詞為真的...