stl演算法-交集,並集,差集,對稱差
學數學時我們知道人集合的概念,所謂集合就是符合某個條件的一堆元素.針對它們做的最多的操作就是求交集,並集,差集,對稱差集.不過集合有個特性就是不能有重複的元素.
而stl中的演算法中的交並集,所用到的容器不一定要是不能有重複元素.並集等的結果是排好序的乙個集合.預設是通過《來比較.所以按照預設操作容器的元素必須可以進行運算子《的操作,如果是自定義型別必須過載運算子<.當然也可以通過傳乙個函式物件實現元素的比較功能.
下面來舉幾個簡單的例子看下
該例子針對集合one,two做交,並集等操作,結果儲存到result中
#include //用stl的演算法需要引用此標頭檔案
#include
#include
using namespace std;
setone;
one.insert(11);
one.insert(22);
one.insert(33);
settwo;
two.insert(11);
two.insert(44);
two.insert(55);
vectorresult;
result.resize( one.size() + two.size() ); //result是用來儲存one和two的交,並,差集的.自然要保定它的大小.要能裝得下one,two兩者元素之和.
vector:iterator retendpos; //這是那些演算法函式返回的結果
交集就是同時屬於兩個集合的元素,也就是同時屬於one和two的元素.
//該函式返回的結果是所以相同元素插入到result後,最後乙個元素的迭代器
retendpos = set_intersection( one.begin(), one.end(), two.begin(), two.end() ,result.begin());
result.resize( retendpos - result.begin() ) ; //重新調整result的大小,使其大小剛好等於並集元素個數.
//此時result中的元素是11,one和two中只有11是共同元素嘛
並集就是把兩個元素所有元素合併到一起嘛,去除掉重複的.
retendpos = set_union( one.begin(), one.end(), two.begin(), two.end() , result.begin());
result.resize( retendpos - result.begin() ) ;
//此時result中的元素為11 22 33 44 55
差集就是兩個集之間的差. 比如one - two就是只屬於one但不屬於two的元素,也就是去掉one中與two相同的元素.反過來two - one就是去掉two中與one相同的元素.
retendpos = set_difference( one.begin(), one.end(), two.begin(), two.end() , result.begin());
result.resize( retendpos - result.begin() ) ;//此時result中元素為 22 33
retendpos = set_difference( two.begin(), two.end(), one.begin(), one.end() , result.begin()); //one 與two的位置互換了
result.resize( retendpos - result.begin() ) ;//此時result中元素為 44 55
對稱差指只屬於one或two,但不同時屬於one和two的.實際上就是one和two的並集 與 one和two交集的 差集
retendpos = set_symmetric_difference( one.begin(), one.end(), two.begin(), two.end() , result.begin());
result.resize( retendpos - result.begin() ) ; //此時result中元素為 22 33 44 55
STL演算法 交集,並集,差集,對稱差
學數學時我們知道人集合的概念,所謂集合就是符合某個條件的一堆元素.針對它們做的最多的操作就是求交集,並集,差集,對稱差集.不過集合有個特性就是不能有重複的元素.而stl中的演算法中的交並集,所用到的容器不一定要是不能有重複元素.並集等的結果是排好序的乙個集合.預設是通過 來比較.所以按照預設操作 容...
STL演算法 交集,並集,差集,對稱差
學數學時我們知道人集合的概念,所謂集合就是符合某個條件的一堆元素.針對它們做的最多的操作就是求交集,並集,差集,對稱差集.不過集合有個特性就是不能有重複的元素.而stl中的演算法中的交並集,所用到的容器不一定要是不能有重複元素.並集等的結果是排好序的乙個集合.預設是通過 來比較.所以按照預設操作 容...
STL之交集 並集 差集
stl對集合操作有標準的演算法,有沒有用過呢?使用它們的時候有需要注意什麼?例子程式?如果沒接觸過,請看這裡的簡單介紹 交集set intersection 並集set union 差集set difference 對稱差集set symeetric difference。針對這裡提及的四個集合運算...