【通俗易懂C++ STL模板库】find_if()、plus,for_each()

STL算法--find_if()

#include

#include

#include

#include

using namespace std;

template

class IsDiv{

    public:

        IsDiv(const Type &divisor){

            this->divisor = divisor;

        }   

        bool operator()(Type &t){

            return t%divisor == 0;

        }   

    protected:

    private:

        Type divisor;

};

int main(void){

    vector v2; 

    for(int i = 10; i < 33; i++){

        v2.push_back(i);

    }   

    int a = 4;

    IsDiv myDiv(a);

    //find_if(v2.begin(), v2.end(), myDiv);

    vector::iterator it;

    it =find_if(v2.begin(), v2.end(), IsDiv(a) );

    if(it == v2.end()){

        cout<<"容器中没有值是4的元素"<

    }else{

        cout<<"第一个被4整除的元素是:"<<*it<

    }

    return 0;

STL算法--plus的使用

#include

#include

#include

#include

using namespace std;

//plus 预定义好的函数对象,能实现不同数据 + 算法;

//实现了数据类型和算法的分离======》通过函数对象技术实现的;

//

//思考,怎么知道plus是2个参数------>多看看源码;

void main21(){

    plus intAdd;

    int x = 10;

    int y = 20;

    int z = intAdd(x, y);

    cout<<"z:"<

    plus stringAdd;

    string s1 = "aaa";

    string s2 = "bbb";

    string s3 = stringAdd(s1, s2);

    cout<<"s3:"<

    vector v1;

    v1.push_back("bbb");

    v1.push_back("aaa");

    v1.push_back("ccc");

    v1.push_back("zzz");

    v1.push_back("ccc");

    v1.push_back("ccc");

    sort(v1.begin(), v1.end(), greater()); //降序排列;

    vector::iterator it;

    for(it = v1.begin(); it != v1.end(); it++){

        cout<<*it<

    }

    //求“ccc”出现的字符串的个数;

    string sc = "ccc"; //函数适配器:将函数和参数强行绑定;

    //equal_to有2个参数,left参数来自容器,right参数来自sc,

    //bind2nd就是函数适配器:把预定义函数对象和第二个参数进行绑定;`

    int num = count_if(v1.begin(), v1.end(), bind2nd(equal_to(), sc));

    cout<<"num:"<

}

int main(void){

    main21();

    return 0;

}

STL算法--for_each()

#include

#include

#include

#include

using namespace std;

void printV(vector &v){

    vector::iterator it;

    for(it = v.begin(); it != v.end(); it++){

        cout<<*it<<" ";

    }

    cout<

}

void showElem(int &n){

    cout<

}

class MyShow{

    public:

        MyShow(){

            num = 0;

        }

    void operator()(int &n){

        num++;

        cout<

    }

    void printNum(){

        cout<<"num :"<

    }

    private:

        int num;

};

int main(void){

    vector v1;

    v1.push_back(1);

    v1.push_back(3);

    v1.push_back(5);

    printV(v1);

    //第三个参数是:函数对象/回掉函数

    //for_each(v1.begin(), v1.end(), showElem);  //利用的是回调函数 

    for_each(v1.begin(), v1.end(), MyShow()); //利用的是函数对象(这个类中重载了())

    //函数的返回值是函数对象

    cout<

    MyShow my1 = for_each(v1.begin(), v1.end(), MyShow()); //利用的是函数对象(这个类中重载了())

    my1.printNum();

    return 0;

    } 

for_each()和transform()的区别

#include

#include

#include

#include

using namespace std;

void showElem(int &n){

    cout<

int showElem2(int &n){

    cout<

    return n;

//for_each和transform的本质区别:

//结论:

//1、一般情况下,for_each所使用的函数对象,参数是引用,没有返回值;

//2、transform所使用的函数对象,参数一般不使用引用,而是还有返回值;

int main(void){

    vector v1; 

    v1.push_back(1);

    v1.push_back(3);

    v1.push_back(5);


    vector v2 = v1; 

    for_each(v1.begin(), v1.end(), showElem);

    transform(v2.begin(), v2.end(), v2.begin(), showElem2);//transform对回调函数的要求;返回值必须有

    cout<

    return 0;

}


如果喜欢欢迎关注   编程小兔崽

你可能感兴趣的:(【通俗易懂C++ STL模板库】find_if()、plus,for_each())