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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章