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;
        }
        
  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/zhaohu/p/9409398.html
Copyright © 2011-2022 走看看