zoukankan      html  css  js  c++  java
  • C++STL之整理算法

    这里主要介绍颠倒、旋转、随机排列和分类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 }
  • 相关阅读:
    shell 重启 tomcat 脚本
    shell 复制/备份文件 脚本
    在 CentOS 上安装 node.js
    架构漫谈(一):什么是架构? -王概凯
    冷静审视人工智能技术的本质 | 一图看懂新一代人工智能知识体系大全
    时代在变
    什么是设计思维Design Thinking——风靡全球的创造力培养方法
    金融即服务(FaaS),将开启场景化金融新格局
    devops工具
    京东金融-供应链金融业务介绍
  • 原文地址:https://www.cnblogs.com/bewolf/p/4424994.html
Copyright © 2011-2022 走看看