日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

特定容器算法

發布時間:2024/6/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 特定容器算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

與其他容器不同,鏈表類型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之后,來自兩個鏈表中的元素仍然存在,但它們都已在同一個鏈表中。

?

轉載于:https://www.cnblogs.com/wuchanming/p/3918418.html

總結

以上是生活随笔為你收集整理的特定容器算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。