直接代码:
//next_permutation prev_permutation #include<iostream> #include<string> #include<vector> #include<algorithm> #include<functional> using namespace std; int main(){ int a[]={1,2,3}; vector<int>v(a,a+3); copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); cout<<endl; while(next_permutation(v.begin(),v.end())){ copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); cout<<endl; } //调用了next_permutation之后 cout<<"after next_permutation:"<<endl; copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); cout<<endl; cout<<"***********************"<<endl; while(prev_permutation(v.begin(),v.end())){ copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); cout<<endl; } cout<<"after prev_permutation:"<<endl; copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); cout<<endl; while(prev_permutation(v.begin(),v.end())){ copy(v.begin(),v.end(),ostream_iterator<int>(cout," ")); cout<<endl; } system("pause"); return 0; }
//重排元素 #include<iostream> #include<string> #include<vector> #include<algorithm> #include<functional> #include<ctime> using namespace std; class MyRandom{ public: ptrdiff_t operator()(ptrdiff_t max){//RAND_MAX是一个常量32767 double temp; temp=static_cast<double>(rand())/static_cast<double>(RAND_MAX); return static_cast<ptrdiff_t>(temp*max); } }; int main(){ int a[]={1,2,3,4,5,6,7,8,9,10}; vector<int>v(a,a+10); vector<int>vv(a,a+10); random_shuffle(v.begin(),v.end());//只能一次,以后都是这个排序 for(vector<int>::iterator iter=v.begin();iter!=v.end();++iter){ cout<<*iter<<" "; } cout<<endl; srand(unsigned(time(NULL))); MyRandom suiji; random_shuffle(vv.begin(),vv.end(),suiji);//现在实现了真正的随机 for(vector<int>::iterator it=vv.begin();it!=vv.end();++it){ cout<<*it<<" "; } cout<<endl; system("pause"); return 0; }