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

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