c++ find的简单使用 以及 仿函数

#include <iostream>
#include<algorithm>
#include<iterator>
#include<vector>
using namespace std;
class yang
{
public:
    yang(int _age):age(_age){}
    bool  operator==(const yang&n)
    {
        return age == n.age;
    }
    int age;
};
class sen
{
public:
    sen(int age):_age(age){}
    //函数操作符
    bool operator()(const yang& s)
    {
        return _age == s.age;
    }
    int _age;

};
int main()
{
    {
        std::vector<int>name{1,2,3,4,5,6,7};
        auto itera = std::find(name.begin(),name.end(),3);
        if(itera != name.end())
        {
            std::cout<<"finbd it :"<<std::distance(name.begin(),itera)<<std::endl;
        }
		// 如果是自己定义的对象时,要写操作符重载
        std::vector<yang> name1;
        name1.emplace_back(12);
        name1.emplace_back(14);

        auto itera1= std::find(name1.begin(),name1.end(),14);
        if(itera1 != name1.end())
        {
            std::cout<<"finbd it :"<<std::distance(name1.begin(),itera1)<<std::endl;
        }
		// find_if 第三个参数是函数对象。
		// 这块 你可以使用 操作符函数, lambda , 以及使用 function 与 bind的函数都可以
        itera1= std::find_if(name1.begin(),name1.end(),sen(14));
        if(itera1 != name1.end())
        {
            std::cout<<"finbd it :"<<std::distance(name1.begin(),itera1)<<std::endl;
        }
        int num =14;
        itera1= std::find_if(name1.begin(),name1.end(),[=](yang s){ return s.age == num;});
        if(itera1 != name1.end())
        {
            std::cout<<"finbd it :"<<std::distance(name1.begin(),itera1)<<std::endl;
        }

    }





    {
        std::vector<yang> name;
        name.emplace_back(12);
        name.emplace_back(13);
        name.emplace_back(14);
        name.emplace_back(15);
        name.emplace_back(11);
        name.emplace_back(12);
        name.emplace_back(13);

        std::vector<yang> name1;
        name1.emplace_back(12);
        name1.emplace_back(13);
        auto itera = std::find_end(name.begin(),name.end(),name1.begin(),name1.end());
        if(itera != name.end())
        {
            std::cout<<"found it :"<<std::distance(name.begin(),itera) <<std::endl;
        }

        itera = std::find_first_of(name.begin(),name.end(),name1.begin(),name1.end());
        if(itera != name.end())
        {
            std::cout<<"found it :"<<std::distance(name.begin(),itera) <<std::endl;
        }
    }

    {
    	//简单解释 操作符重载
        sen s(10); // 调用构造函数
        s(111);	// 调用  operator()(yang &s)
        sen(19)(10); // 这个和上面 两条语句等价 , sen(19) 生成临时对象 然后调用 operator()(yang &s)
     }





    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值