標籤:algorithm 演算法 stl
set_difference原型:
std::set_difference
| default (1) |
template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); |
| custom (2) |
template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); |
該函數是獲得兩個集合的差集。
序列應該已經有序!
返回值為result中最後一個被覆蓋元素下一位置的迭代器。
其行為類似於:
template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result){ while (first1!=last1 && first2!=last2) { if (*first1<*first2) { *result = *first1; ++result; ++first1; } else if (*first2<*first1) ++first2; else { ++first1; ++first2; } } return std::copy(first1,last1,result);}一個簡單的例子:
#include <iostream>#include <algorithm>#include <vector>using namespace std;void setdifference(){ vector<int> vi{1,2,3,4,4,6,9,22,11}; vector<int> v2{1,2,3,5,4,9,8}; vector<int> vresult(6); sort(vi.begin(),vi.end()); sort(v2.begin(),v2.end()); cout<<"vi="; for(int i:vi) cout<<i<<" "; cout<<endl; cout<<"v2="; for(int i:v2) cout<<i<<" "; cout<<endl; set_difference(vi.begin(),vi.end(),v2.begin(),v2.end(),vresult.begin()); cout<<"vreult="; for(int i:vresult) cout<<i<<" "; cout<<endl;}運行:
set_intersection原型:
std::set_intersection
| default (1) |
template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result); |
| custom (2) |
template <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); |
該函數是求兩個集合的交集。
同樣的序列應該已經有序。
行為類似於:
template <class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_intersection (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result){ while (first1!=last1 && first2!=last2) { if (*first1<*first2) ++first1; else if (*first2<*first1) ++first2; else { *result = *first1; ++result; ++first1; ++first2; } } return result;}一個簡單的例子:
#include <iostream>#include <algorithm>#include <vector>using namespace std;void setintersection(){ vector<int> vi{1,2,3,4,4,6,9,22,11}; vector<int> v2{1,2,3,5,4,9,8}; vector<int> vresult(6); sort(vi.begin(),vi.end()); sort(v2.begin(),v2.end()); cout<<"vi="; for(int i:vi) cout<<i<<" "; cout<<endl; cout<<"v2="; for(int i:v2) cout<<i<<" "; cout<<endl; set_intersection(vi.begin(),vi.end(),v2.begin(),v2.end(),vresult.begin()); cout<<"vreult="; for(int i:vresult) cout<<i<<" "; cout<<endl;}運行:
其中0是本來就有沒有被覆蓋的。更好的做法是使用for,然後利用set_intersection的返回值作為界限遍曆。
——————————————————————————————————————————————————————————————————
//寫的錯誤或者不好的地方請多多指導,可以在下面留言或者點擊左上方郵件地址給我發郵件,指出我的錯誤以及不足,以便我修改,更好的分享給大家,謝謝。
轉載請註明出處:http://blog.csdn.net/qq844352155
author:天下無雙
Email:[email protected]
2014-9-26
於GDUT
——————————————————————————————————————————————————
STL algorithm演算法set_difference,set_intersection(53)