zoukankan      html  css  js  c++  java
  • 泛型算法-非变易算法

    • for_each()
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        
        template<class A>
        inline void printElements(A& ele)
        {
                std::cout<<ele<<std::endl;
        }
        
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                std::for_each(v.begin(), v.end(), printElements<int>);
                return 0;
        }
        
    • find find_if 
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                std::vector<int>::iterator it = std::find(v.begin(),v.end(),3);
                if(it != v.end())
                {
                        std::cout<<"Find Data "<<*it<<std::endl;
                }
        
                //找到一个数大于50      
                it = std::find_if(v.begin(),v.end(),std::bind2nd(std::greater<int>(),50));
                if(it != v.end())
                {
                        std::cout<<"Find Data "<<*it<<std::endl;
                }
        
                return 0;
        }
        ~  
        
    • adjacent_find
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                std::vector<int>::iterator it;
                //找到两个数相等 (*it) = *(it++)
                it = std::adjacent_find(v.begin(), v.end());
                if(it != v.end())
                {
                        std::cout<<"Find Data "<<*it<<std::endl;
                }
        
                //找到(*it) > *(it++)
                it = std::adjacent_find(v.begin(),v.end(),std::greater<int>());
                if(it != v.end())
                {
                        std::cout<<"Find Data "<<*it<<std::endl;
                }
                return 0;
        }
        
    • find_first_of
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        
        //第一段范围内查找与第二段范围中任意元素匹配的元素,然后返回一个迭代器,指向第一个匹配的元素。如果找不到匹配元素,>则返回第一个范围的end迭代器。
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int elements1[] = {100,100,5};
        
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                int n1 = sizeof(elements1) / sizeof(int);
                std::vector<int> v1(elements1, elements1 + n1);
                  
                //从v中找到v1中的值
                std::vector<int>::iterator it = std::find_first_of(v.begin(),v.end(),v1.begin(),v1.end());
                if(it != v.end())
                {    
                        std::cout<<"Find Data "<<*it<<std::endl;
                }
        
            
                return 0;
        }
        
    • count count_if
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                int sum = std::count(v.begin(), v.end(), 100);
                std::cout<<"Find Equal 100 Number is:"<<sum<<std::endl;
        
                int out = std::count_if(v.begin(), v.end(), std::bind2nd(std::less<int>(),100));
                std::cout<<"Fine Less 100 Number is:"<<out<<std::endl;
                return 0;
        }
        
    •  equal
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        
        template<class T>
        inline bool IfEqual(T& m, T& n)
        {
                return (m == n);
        }
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int elements1[] = {1,2,3,200};
        
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                int n1 = sizeof(elements1) / sizeof(int);
                std::vector<int> v1(elements1, elements1 + n1);
        
                bool b = std::equal(v.begin(),v.end(),v1.begin());
                if(b)
                {
                        std::cout<<"euqal"<<std::endl;
                }
                else
                {
                        std::cout<<"not equal"<<std::endl;
                }
        
                b = std::equal(v.begin(),v.end(),v1.begin(),IfEqual<int>);
                return 0;
        }
        
    • search
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        template<class T>
        struct SearchDouble:public std::binary_function<T,T,bool>
        {
                bool operator()(const T& left, const T& right) const
                {
                        return (right == (left * 2));
                }
        };
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int elements1[] = {6,200};
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                int n1 = sizeof(elements1) / sizeof(int);
                std::vector<int> v1(elements1, elements1 + n1);
        
                std::vector<int>::iterator it;
                it = std::search(v.begin(),v.end(),v1.begin(),v1.end());
                if(it != v.end())
                {
                        std::cout<<"Find SubStr Equal v1:"<<*it<<std::endl;
                }
                else
                {
                        std::cout<<"Dont Find!"<<std::endl;
                }
        
                it = std::search(v.begin(),v.end(),v1.begin(),v1.end(),SearchDouble<int>());
                if(it != v.end())
                {
                        std::cout<<"search double ok"<<*it<<std::endl;
                }
                return 0;
        }
        

          

    • mismatch
      • #include <vector>
        #include <iostream>
        #include <algorithm>
        
        //从第一个容器里面找到与第二个容器不一样的第一个元素
        int main()
        {
                int elements[] = {1,2,3,100,100,5};
                int elements1[] = {1,2,3,200};
        
                int n = sizeof(elements) / sizeof(int);
                std::vector<int> v(elements, elements + n);
        
                int n1 = sizeof(elements1) / sizeof(int);
                std::vector<int> v1(elements1, elements1 + n1);
        
                typedef std::vector<int>::iterator IntIterator;
                std::pair<IntIterator,IntIterator> p;
        
                p = std::mismatch(v.begin(),v.end(),v1.begin());
                if(p.first == v.end() && p.second == v1.end())
                {
                        std::cout<<"equal"<<std::endl;
                }
                else
                {
                        std::cout<<"not equal:"<<std::endl<<*p.first<<" "<<*p.second<<std::endl;
                }
        
        
                p = std::mismatch(v.begin(),v.end(),v1.begin(),std::greater_equal<int>());
                return 0;
        }
        
  • 相关阅读:
    动态规划
    nginx访问静态资源403
    转)服务器CPU占用100%的问题排查
    linux下脚本设置开机自启服务
    在蓝鲸标准运维上进行原子开发
    Django model数据排序
    Mac tar压缩命令,去除隐藏文件
    vue 简单的分页功能实现二
    vue 简单的分页功能实现一
    安装 libmagic in Mac OS (for Python-magic)
  • 原文地址:https://www.cnblogs.com/zhaohu/p/9409398.html
Copyright © 2011-2022 走看看