搬 STL演算法 交集,並集,差集,對稱差

2021-09-22 14:16:48 字數 2247 閱讀 4421

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。針對這裡提及的四個集合運算...