这里主要介绍颠倒、旋转、随机排列和分类4中常见的整理算法
1、颠倒(反转)
void reverse(_BidIt _First, _BidIt _Last)
_OutIt reverse_copy(_BidIt _First, _BidIt _Last,_OutIt _Dest)
2、旋转
_FwdIt rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last)
_OutIt rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last,_OutIt _Dest)
交换[_First, _Mid)和[_Mid, _Last)的位置
3、随机排列
void random_shuffle(_RanIt _First, _RanIt _Last, _Fn1& _Func)
4、分类(注意分类算法需要写一个分类标准的结构体,需要继承STL的函数对象uniry_function或binary_function)
_BidIt partition(_BidIt _First, _BidIt _Last, _Pr _Pred)
_BidIt stable_partition(_BidIt _First, _BidIt _Last, _Pr _Pred)
将迭代器区间内的数据分成两部分,符合标准的数据将放在的迭代器区间的前面部分,不符合标准的放在迭代器的后半部分
1 #include<iostream> 2 #include<algorithm> 3 #include<functional> 4 using namespace std; 5 void print(int *num,int n) 6 { 7 for(int i=0;i<n;i++) 8 { 9 cout<<num[i]<<' '; 10 } 11 cout<<endl; 12 } 13 int main() 14 { 15 int num[10]={1,2,4,5,7,3,4}; 16 print(num,7); 17 //void reverse(_BidIt _First, _BidIt _Last) 18 reverse(num,num+7); 19 print(num,7); 20 int num_r_copy[7]; 21 //_OutIt reverse_copy(_BidIt _First, _BidIt _Last,_OutIt _Dest) 22 reverse_copy(num,num+7,num_r_copy); 23 print(num,7); 24 print(num_r_copy,7); 25 26 27 //_FwdIt rotate(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last) 28 //交换[_First, _Mid)和[_Mid, _Last)的位置 29 print(num,7); 30 rotate(num,num+1,num+7); 31 print(num,7); 32 33 rotate(num,num+2,num+5); 34 print(num,7); 35 //rotate_copy 36 //_OutIt rotate_copy(_FwdIt _First, _FwdIt _Mid, _FwdIt _Last,_OutIt _Dest) 37 //不改变原数组,将旋转好的数组放在新的数组里 38 39 //随机排列 40 //void random_shuffle(_RanIt _First, _RanIt _Last, _Fn1& _Func) 41 random_shuffle(num,num+7); 42 print(num,7); 43 44 //分类 45 //注意分类算法是需要写一个分类标准的函数的,所以需要用到写一个新的结构体或者类来继承STL函数,并且重载()运算符 46 //partition、stable_partition 47 //_BidIt partition(_BidIt _First, _BidIt _Last, _Pr _Pred) 48 //将迭代器区间内的数据分成两部分,符合标准的数据将放在的迭代器区间的前面部分,不符合标准的放在迭代器的后半部分 49 struct iseven :public unary_function<int,bool> 50 { 51 bool operator()(int val)//重载()运算符 52 { 53 return val%2==0;//判断是否为偶数 54 } 55 }; 56 int ynum1[10]={1,2,3,4,5,6,7,8,9,10}; 57 print(ynum1,10); 58 partition(ynum1,ynum1+10,iseven()); 59 print(ynum1,10); 60 61 int ynum2[10]={1,2,3,4,5,6,7,8,9,10}; 62 print(ynum2,10); 63 stable_partition(ynum2,ynum2+10,iseven()); 64 print(ynum2,10); 65 return 0; 66 }