C 標準庫 已序演算法之三合併元素

2021-06-27 23:02:45 字數 2866 閱讀 9495

合併元素

兩個已序集合的總和

merge(source1beg,source1end,source2beg,source2end,destbeg)

merge(source1beg,source1end,source2beg,source2end,destbeg,op)

(1)兩者都將源區間[source1beg,source1end)和[source2beg,source2end)內的元素合併,使得「以destbeg起始的目標區間」內含兩個源區間的所有元素;

(2)目標區間內的所有元素按順序排列;

(3)兩者都返回目標區間內「最後乙個被複製元素」的下一位置;

(4)op是乙個可有可無的二元判斷式,被當做排序準則:

op(elem1,elem2)

(5)源區間沒有任何變化;

(6)根據標準,呼叫者應當確保兩個源區間一開始都已序,然而在大多數實做版本中,上述演算法可以將兩個無序的源區間內的元素合併到乙個無序的目標區間中;

(7)呼叫者必須保證目標區間足夠大,要不就得使用插入型迭代器;

(8)目標區間和源區間不得重迭;

(9)list提供了乙個特殊成員函式merge(),用來合併兩個list;

(10)複雜度:線性;

兩個已序集合的並集

set_union(source1beg,source1end,source2beg,source2end,destbeg)

set_union(source1beg,source1end,source2beg,source2end,destbeg,op)

(1)兩者都將源區間[source1beg,source1end)和[source2beg,source2end)內的元素合併,得到「以destbeg起始」的目標區間---這個區間內含的元素要不來自第一源區間,要不就來自第二源區間,或同時來自兩個源區間;

(2)目標區間內的所有元素都按順序排序;

(3)同時出現於兩個源區間的元素,在並集區間中將只出現一次,不過如果原來的某個源區間內原來就存在重複元素,則目標區間內也會有重複元素---重複的個數是兩個源區間內的重複個數的叫大值;

(4)兩者都返回目標區間內「最後乙個被複製元素」的下一位置;

(5)op是乙個可有可無的二元判斷式,被當做排序準則:

op(elem1,elem2)

(6)源區間沒有任何變化;

(7)呼叫者必須保證目標區間足夠大,要不就得使用插入型迭代器;

(8)呼叫者應當確保兩個源區間一開始都已序;

(9))目標區間和源區間不得重迭;

(10)複雜度:線性;

兩個已序集合的交集

set_intersection(source1beg,source1end,source2beg,source2end,destbeg)

set_intersection(source1beg,source1end,source2beg,source2end,destbeg,op)

(1)兩者都將源區間[source1beg,source1end)和[source2beg,source2end)內的元素合併,得到「以destbeg起始」的目標區間---這個區間內含的元素不但存在於第一源區間,也存在於第二源區間;

(2)如果某個源區間內原就存在有重複元素,則目標區間內也會有重複元素---重複的個數是兩個源區間內的重複個數的較小值;

兩個已序集合的差集

set_difference(source1beg,source1end,source2beg,source2end,destbeg)

set_difference(source1beg,source1end,source2beg,source2end,destbeg,op)

(1)兩者都將源區間[source1beg,source1end)和[source2beg,source2end)內的元素合併,得到「以destbeg起始」的目標區間---這個區間內含的元素只存在於第一源區間,不存在於第二源區間;

(2)如果某個源區間內原就存在有重複元素,則目標區間內也會有重複元素---重複的個數是第一源區間內的重複個數減去第二源區間內的相應重複個數,如果第二區間內的重複個數大於第一區間內的相應重複個數,目標區間內的對應重複個數將會是零;

set_symmetric_difference(source1beg,source1end,source2beg,source2end,destbeg)

set_symmetric_difference(source1beg,source1end,source2beg,source2end,destbeg,op)

(1)兩者都將源區間[source1beg,source1end)和[source2beg,source2end)內的元素合併,得到「以destbeg起始」的目標區間---這個區間內含的元素或存在於第一源區間,或存在於第二源區間,但不同時存在於兩院區間內;

(2)如果某個源區間內就存在有重複元素,則目標區間內也會有重複元素---重複的個數是兩個源區間內的對應重複元素的個數差額;

綜合**示例:

C 標準庫演算法

在遵循 不重複製造輪子 的原則下,對於一些基本演算法,要盡可能地使用標準庫提供的函式 在中定義 一是節省時間,二是標準實現在演算法效能上 我在此簡要回顧一下標準庫中都提供了哪些常見的演算法。1 基本數學相關 max t1,t2 和min t1,t2 返回t1和t2中的較大 較小者。max eleme...

C 標準庫之

iomanip在c 程式裡面經常見到下面的標頭檔案 include io代表輸入輸出,manip是manipulator 操縱器 的縮寫 在c 上只能通過輸入縮寫才有效。dec 設定整數為十進位制 hex 設定整數為十六進製制 oct 設定整數為八進位制 setbase n 設定整數為n進製 n 8...

C 演算法標準庫常用演算法

1.演算法 找到某個值,或者某個謂詞判斷 find find if 計數某個值,或者某個謂詞判斷 count count if 查詢子串行 search 查詢最值 min element 2.隨機數 引擎 分布 例程 include include using namespace std int m...