子集生成+stl全排列

#include <cstdio>
#include <string>
#include <sstream>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
void print(int n,int s,int p[])
{
    for(int i=0;i<n;i++)
    {
        if(s&(1<<i))
            printf("%d ",p[i]);
    }
    puts("");
}
int main()
{
    int n,p[10];
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>p[i];
    //sort(p,p+n);
    for(int i=0;i<(1<<n);i++)
    {
        print(n,i,p);//二进制子集生成法
    }
    return 0;
}
// stl 方法
// int top = 1;
// do
// {
// if(top)top = 0;
// else
// {
// for(int i=0;i<n;i++)
// printf("%d ",p[i]);
// printf("\n");
// }
//
// }
// while(next_permutation(p,p+n));