set器皿有没有插入迭代器

set容器有没有插入迭代器
我想弄个交并差的集合,应用了set容器和set_union等算法,可是这个方法需要一个输出迭代器,我不知道这个迭代器应该怎么写set器皿有没有插入迭代器
#include "stdafx.h"
using namespace std;
int main()
{
   set<int>a,b;
   set<int>uni,intersection,dif;
   int n,m,num;
   cin>>n;
   for(int i=0;i<n;++i)
   {
       cin>>num;
       a.insert(num);
   }
   for(int i=0;i<m;++i)
   {
       cin>>num;
       b.insert(num);
   }
//底下三个都报错了……
   set_union(a.begin(),a.end(),b.begin(),b.end(),back_inserter(uni));
   set_intersection(a.begin(),a.end(),b.begin(),b.end(),back_inserter(intersection));
   set_difference(a.begin(),a.end(),b.begin(),b.end(),back_inserter(dif));
   copy(uni.begin(),uni.end(),ostream_iterator<int>(cout,"\n"));
}

------解决方案--------------------

   set_union(a.begin(),a.end(),b.begin(),b.end(),inserter(uni,uni.end()));
   set_intersection(a.begin(),a.end(),b.begin(),b.end(),inserter(intersection,intersection.end()));
   set_difference(a.begin(),a.end(),b.begin(),b.end(),inserter(dif,dif.end()));

------解决方案--------------------
仅供参考
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstring>
using namespace std;
int main() {
    char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;
    char *Vowels   = "aeiou" ;
    char *AlphaNum = "0123456789abcdef" ;
    char result[45] ;
    char *last ;

    int lenA  = strlen(Alphabet) ;
    int lenV  = strlen(Vowels  ) ;
    int lenAN = strlen(AlphaNum) ;

    cout << "Alphabet = " << Alphabet << endl ;
    cout << "Vowels   = " << Vowels   << endl ;
    cout << "AlphaNum = " << AlphaNum << endl ;

    cout << "\nusing non-predicate versions" << endl ;

    //non-predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //non-predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result) ;