请问代码报错的原因是什么,要怎么改


#include<stdio.h>
#include<vector>
using namespace std;
vector<vector<int> > ps;            //存放幂集

void PSet(int n)                    //求1~n的幂集ps
{
    vector<vector<int> > ps1;        //子幂集
    vector<vector<int> > :: iterator it;        //幂集迭代器
    vector<int>s;
    ps.push_back(s);                //添加{}空集合元素
    for(int i = 1;i <= n;i++)        //循环添加1~n
    {
        ps1 = ps;                    //ps1存放上一步产生的幂集
        for(it = ps1.begin();it != ps1.end();++it)        
            (*it).push_back(i);        //在ps1的每个集合元素的末尾添加i
        for(it = ps1.begin();it != ps1.end();++it)
            ps.push_back(*it);        //将ps1的每个集合元素添加到ps中
    }
}

void dispps()                        //输出幂集ps
{
    vector<vector<int>>::iterator it;            //幂集迭代器
    vector<int>::iterator sit;
    for(it = ps.begin();it != ps.end();++it)    //幂集集合元素迭代器
    {
        printf("{");
        for(sit = (*it).begin();sit != (*it).end();++sit)
            printf("%d".*sit);
        printf("}");
    }
    printf("\n");
}
void main()
{
    int n = 3;
    PSet(n);
    printf("1~%d的幂集:\n",n);
    dispps();
}