现在的位置: 首页 > 综合 > 正文

set布尔bySTL

2018年02月16日 ⁄ 综合 ⁄ 共 2395字 ⁄ 字号 评论关闭

 

//write_container.cpp

#include <string>

using std::string;

template<class Iterator> 

void write_container(Iterator first, Iterator last, const string separator = "  ")

{

    Iterator  iter = first;

 while(iter != last)

 {

  cout << *iter << separator;

  iter++;

 }

 cout << endl;

}

 

///////////main.cpp

 

#include <iostream>

#include <fstream>

#include "write_container.cpp"

#include <set>

#include <string>

using namespace std;

template<class T>  set<T>  operator * (const set<T> & lre, const set<T> & rre);

template<class T>  set<T>  operator + (const set<T> & lre, const set<T> & rre);

template<class T>  set<T>  operator - (const set<T> & lre, const set<T> & rre);

int main()

 {

  char ch_arr[10] = {'A','N','F','E','A','M','K','N','B','F'};

  set<char>  setA(ch_arr,ch_arr+4), setB(ch_arr+4,ch_arr+10); // ?半开区间?

     set<char>  intersection = setA*setB;

  write_container( intersection.begin(), intersection.end() );

 

  set<char>  setU = setA + setB;

     write_container( setU.begin(), setU.end() );

 

  set<char>  setD = setB - setA;

  write_container( setD.begin(), setD.end() );

  return 0;

 }

// 交集

template<class T>  set<T>  operator * (const set<T> & lre, const set<T> & rre)

{

 // 交集

 set<T>  setInterSection;

 set<T>::const_iterator lre_ite = lre.begin(), rre_ite = rre.begin();

 // 如果没有达到集合末尾,则移动迭代器

 while( lre_ite != lre.end() && rre_ite != rre.end() )

 {

        if ( *lre_ite < *rre_ite )

       lre_ite++;

     else if (*lre_ite > *rre_ite)

       rre_ite++;

     else

     {

      setInterSection.insert( *lre_ite);

      lre_ite++;

               rre_ite++;

 

     }

 }

 return setInterSection;

}

 

// 并集

template<class T>  set<T>  operator + (const set<T> & lre, const set<T> & rre)

{

 

   set<T>  unionSet(lre);

   set<T>::const_iterator  ite = rre.begin(), ite_end = rre.end();

   while( ite != ite_end)

   {

             unionSet.insert( *ite);

             ite++;

   }

      // A集没有B集的元素,就将b的元素加入并集中

   /*

   set<T>::const_iterator  ite = rre.begin(), ite_end = rre.end();

   while( ite != ite_end)

   {

   if ( unionSet.find( *ite) == unionSet.end() )

    unionSet.insert( *ite);

   ite++;

   }

   */

   return unionSet;

}

// 差集

template<class T>  set<T>  operator - (const set<T> & lre, const set<T> & rre)

{

 set<T> differSet(lre);

 set<T>::const_iterator ite = rre.begin();

 set<T>::iterator temp;

 while( ite != rre.end() )

 {

  temp = differSet.find( * ite);

  if ( temp != differSet.end() )

   differSet.erase(temp);

        ++ite;

 }

 return differSet;

}

 

 

 

【上篇】
【下篇】

抱歉!评论已关闭.