STL源碼剖析筆記-6算法(6.5,6.6)

6.5 set相關算法

  • set_union:
    • 構造s1和s2的並集,此集合內含有s1和s2的所有元素
    • 某個值在s1內出現n次,在s2內出現m次,那麼該值在輸出區間內出現max(n,m)次,其中n次來自s1,其餘來自s2.
    • 如果兩個值相等就把s1的記錄下來,兩個迭代器前進,如果兩個值不等,取較小的記錄下來,其迭代器前進,再比較。
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_union(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputItreator result)
  • set_intersection:
    • 構造s1和s2的交集,此集合內含同時出現於s1和s2的每一個元素
    • 如果某個值在s1出現n次,在s2出現m次,它在輸出區間內出現min(n, m),並且全部來自s1。
    • 在兩個區間內分別移動迭代器,直到遇到有相同的,記錄下來,然後再繼續移動迭代器,直到遇到末尾。
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_intersection(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputItreator result)
  • set_difference:
    • 構造s1和s2的差集s1-s2,此集合包含出現於s1但不出現於s2的元素
    • 如果某個值在s1出現n次,在s2出現m次,它在輸出區間內出現max(n-m, 0),並且全部來自s1.
    • 在兩個區間內分別移動迭代器,如果s1的值小於s2的,記錄下來s1的值,再兩個迭代器前進;如果s1大於s2,s2的迭代器前進;如果相等,兩個迭代器都前進,直到遇到末尾。
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputItreator result)
  • set_symmetric_difference
    • 構造兩個集合的對稱差集,此集合內含有出現於s1但不出現於s2和出現於s2但不出現於s1的元素,即s1-s2與s2-s1的並集,即此元素在兩個集合內是獨一無二的,不能同時出現在兩個集合內。
    • 如果某個元素在s1內出現n次,在s2內出現m次,那麼它在輸出區間內出現|n-m|次,全部來自於出現次數較多的集合。
    • 在連個區間內分別移動迭代器,如果元素相等,就兩個迭代器前進;如果不等,記錄下較小值,其迭代器前進。
template <class InputIterator1, class InputIterator2, class OutputIterator>
OutputIterator set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputItreator result)

6.6 heap算法

  • 4.7.2節已經介紹過了四種堆算法:make_heap(), pop_heap(), push_heap(), sort_heap().
  • 算法所在的頭文件<stl_algo.h>包含了<stl_heap.h>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章