这里主要介绍颠倒、旋转、随机排列和分类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 }