• algorithm之不变序列操作


    概述:不变序列算法,参见http://www.cplusplus.com/reference/algorithm/

    /*
    std::for_each
    template <class InputIterator, class Function>
        Function for_each (InputIterator first, InputIterator last, Function fn);
    
    Apply function to range
    Applies function fn to each of the elements in the range [first,last).
    [对[first, last)中的所有元素调用函数fn]
    The behavior of this template function is equivalent to:
    [该模板函数的行为与以下操作等价:]
    template<class InputIterator, class Function>
      Function for_each(InputIterator first, InputIterator last, Function fn)
    {
      while (first!=last) {
        fn (*first);
        ++first;
      }
      return fn;      // or, since C++11: return move(fn);
    }
    */
    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    class myclass
    {
    public:
        void operator() (int i)
        {
            std::cout<<' '<<i;
        }
    };
    
    void myfunctoin (int i)
    {
        std::cout<<' '<<i;
    }
    
    int main()
    {
        std::vector<int> myvec;
        std::vector<int>::iterator it;
    
        for(int i=0; i<10; i++)
            myvec.push_back(i+1);
    
        std::cout<<"myvec contains:";
        for_each(myvec.begin(), myvec.end(), myfunctoin);
        std::cout<<'
    ';
    
        //or
        myclass obj;
        std::cout<<"myvec contains:";
        for_each(myvec.begin(), myvec.end(), obj);
        std::cout<<'
    ';
    
        system("pause");
        return 0;
    }
    /*
    std::find
    template <class InputIterator, class T>
    InputIterator find (InputIterator first, InputIterator last, const T& val);
    
    Find value in range
    Returns an iterator to the first element in the range [first,last) that compares equal to val. If no such element is found, the function returns last.
    [返回[first, last)中第一个指向val的迭代器,如果没有找到则返回last]
    The function uses operator== to compare the individual elements to val.
    [该函数使用operator==来比较元素元素是否为val]
    The behavior of this function template is equivalent to:
    [该模板函数的行为与以下操作等价:]
    template<class InputIterator, class T>
    InputIterator find (InputIterator first, InputIterator last, const T& val)
    {
        while(first != last){
        if(*first == val) return first;
            ++first;
        }
        return last;
    }
    */
    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main()
    {
        // using std::find with array and pointer.
        int myints[] = {10, 20, 30, 40};
        int *p;
    
        p = std::find(myints, myints+4, 30);
        if(p != myints+4)
            std::cout<<"Element found in myints: "<<*p<<'
    ';
        else
            std::cout<<"Element not found in myints
    ";
    
        // using std::find with vector and iterator.
        std::vector<int> myvector (myints, myints+4);
        std::vector<int>::iterator it;
    
        it = std::find(myvector.begin(), myvector.end(), 30);
        if(it != myvector.end())
            std::cout<<"Element found in myints: "<<*it<<'
    ';
        else
        std::cout<<"Element not found in myints
    ";
    
        system("pause");
        return 0;
    }
    /*
    std::find_if
    template<class InputIterator, class UnaryPredicate>
    InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);
    
    Find element in range
    Returns an iterator to the first element in the range [first,last) for which pred returns true. If no such element is found, the function returns last.
    [返回[first, last)中第一个使得pred返回真的迭代器,如果没有找到,则返回last]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    template <class InputIterator, class UnaryPredicate>
    InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred)
    {
        while(first != last){
        if(pred(*first))    return first;
        ++first;
        }
        return last;
    }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    bool IsOdd (int i)
    {
        return ((i%2) == 1);
    }
    
    int main()
    {
        std::vector<int> myvector;
    
        myvector.push_back(10);
        myvector.push_back(25);
        myvector.push_back(40);
        myvector.push_back(55);
    
        std::vector<int>::iterator it = std::find_if(myvector.begin(), myvector.end(), IsOdd);
    
        if(it != myvector.end())
            std::cout<<"The first odd value in myvector is "<<*it<<'
    ';
        else
            std::cout<<"There is no odd value in myvector."<<'
    ';
    
        system("pause");
        return 0;
    }
    /*
    //std::adjacent_find
    template <class FowardIterator>
        FowardIterator adjacent_find (FowardIterator first, FowardIterator last);
    
    template <class FowardIterator, class BinaryPredicate>
        FowardIterator adjacent_find (FowardIterator first, FowardIterator last, BinaryPredicate pred);
    
    Find equal adjacent elements in range
    Searches the range [first,last) for the first occurrence of two consecutive elements that match, and returns an iterator to the first of these two elements, or last if no such pair is found.
    [在[fisrt, last)中寻找第一次匹配成功的两个连续元素,并返回指向其中第一个元素的迭代器,如果没有匹配成功,则返回last]
    Two elements match if they compare equal using operator== (or using pred, in version (2)).
    [默认使用operator==来判断两个元素是否匹配成功,或者使用pred来判断]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    template <class FowardIterator>
    FowardIterator adjacent_find (FowardIterator first, FowardIterator last)
    {
        if(first != last)
        {
            FowardIterator next = first;
            ++next;
            while(next != last){
                if(*first == *next)    return first;
                ++first;    ++next;
            }
            return last;
        }
    }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    bool myfunctoin(int i, int j)
    {
        return (i == j);
    }
    
    int main()
    {
        int myints[] = {5, 20, 5, 30, 30, 20, 10, 10, 20};
        std::vector<int> myvector(myints, myints+9);
        std::vector<int>::iterator it;
    
        it  = std::adjacent_find(myvector.begin(), myvector.end());
    
        if(it != myvector.end())
            std::cout<<"The first pair of repeated elements are "<<*it<<'
    ';
    
        it = std::adjacent_find(++it, myvector.end(), myfunctoin);
    
        if(it != myvector.end())
            std::cout<<"The second pair of repeated elements are "<<*it<<'
    ';
    
        system("pause");
        return 0;
    }
    /*
    std::find_end
    template <class ForwardIterator1, class ForwardIterator2>
        ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
    
    template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
        ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred);
    
    Find last subsequence in range
    Searches the range [first1,last1) for the last occurrence of the sequence defined by [first2,last2), and returns an iterator to its first element, or last1 if no occurrences are found.
    [在序列[first1, last2)中搜索出最后一个与序列[first2, last2)相匹配的子序列,并返回指向搜索到的子序列的第一个元素的迭代器,如果没有搜索到则返回last1]
    The elements in both ranges are compared sequentially using operator== (or pred, in version (2)): A subsequence of [first1,last1) is considered a match only when this is true for all the elements of [first2,last2).
    [比较两个序列中的元素是通过operator==来进行的(或者使用pred)]
    This function returns the last of such occurrences. For an algorithm that returns the first instead, see search.
    [该函数按返回的是最后一个匹配的子序列,如果想要得到第一个匹配的子序列,请看search算法]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    template <class ForwardIterator1, class ForwardIterator2>
    ForwardIterator1 find_end (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2)
    {
         if (first2==last2) return last1;  // specified in C++11
    
        ForwardIterator1 ret = last1;
    
        while(first1 != last1)
        {
            ForwardIterator1 it1 = first1;
            ForwardIterator2 it2 = first2;
            while(*it1 == *it2){     // or: while (pred(*it1,*it2)) for version (2)
                ++it1;    ++it2;
                if(it2 == last2)    {ret = first1;    break;}
                if(it1 == last1)    return ret;
            }
            ++first1;
        }
        return ret;
    }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    bool myfunctoin(int i, int j){
        return (i==j);
    }
    
    int main()
    {
        int myints[] = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5};
        std::vector<int> myvector(myints, myints+10);
    
        int needle1[] = {1, 2, 3};
    
        // using default comparison.
        std::vector<int>::iterator it;
        it = std::find_end(myvector.begin(), myvector.end(), needle1, needle1+3);
    
        if(it != myvector.end())
            std::cout<<"needle1 last found  at position "<<(it - myvector.begin())<<'
    ';
    
        int needle2[] = {4, 5, 1};
    
        // using predicate comparison.
        it = std::find_end(myvector.begin(), myvector.end(), needle2, needle2+3, myfunctoin);
    
        if(it != myvector.end())
            std::cout<<"needle2 last found at position "<<(it - myvector.begin())<<'
    ';
    
        system("pause");
        return 0;
    }
    /*
    std::find_first_of
    template <class ForwardIterator1, class ForwardIterator2>
    ForwardIterator1 find_first_of (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2);
    
    template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
    ForwardIterator1 find_first_of (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred);
    
    Find element from set in range
    Returns an iterator to the first element in the range [first1,last1) that matches any of the elements in [first2,last2). If no such element is found, the function returns last1.
    [返回指向[first1, last1)中第一个与[first2, last2)中任一元素相匹配的元素的迭代器,如果没有找到则返回last1]]
    The elements in [first1,last1) are sequentially compared to each of the values in [first2,last2) using operator== (or pred, in version (2)), until a pair matches.
    [元素的比较是通过operator==来进行的(或者通过pred)]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    
    template <class ForwardIterator1, class ForwardIterator2>
    ForwardIterator1 find_first_of (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2)
    {
        while(first1 != last1){
            for(ForwardIterator2 it2 = first2; it2 != last2; ++it2){
                if(*it2 == *first1)     // or: if (pred(*it,*first)) for version (2)
                    return first1;
            }
            ++first1;
        }
        return last1;
    }
    */
    
    #include <iostream>     // std::cout
    #include <algorithm>    // std::find_first_of
    #include <vector>       // std::vector
    #include <cctype>       // std::tolower
    
    bool comp_case_insensitive (char c1, char c2) {
        return (std::tolower(c1)==std::tolower(c2));
    }
    
    int main () {
        int mychars[] = {'a','b','c','A','B','C'};
        std::vector<char> haystack (mychars,mychars+6);
        std::vector<char>::iterator it;
    
        int needle[] = {'A','B','C'};
    
        // using default comparison:
        it = find_first_of (haystack.begin(), haystack.end(), needle, needle+3);
    
        if (it!=haystack.end())
            std::cout << "The first match is: " << *it << '
    ';
    
        // using predicate comparison:
        it = find_first_of (haystack.begin(), haystack.end(),
            needle, needle+3, comp_case_insensitive);
    
        if (it!=haystack.end())
            std::cout << "The first match is: " << *it << '
    ';
    
        system("pause");
        return 0;
    }
    /*
    std::equal
    template <class InputItertor1, class InputIterator2>
        bool equal (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2);
    
    template <class InputIterator1, class InputIterator2, class BinaryPredicate>
        bool equal (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, BinaryPredicate pred);
    
    Test whether the elements in two ranges are equal
    [比较两个范围中的元素是否相等]
    Compares the elements in the range [first1,last1) with those in the range beginning at first2, and returns true if all of the elements in both ranges match.
    [将[first1, last1)中的元素与以first2为起点的相同范围内的元素进行比较,如果两个范围中的元素全部相等则返回真]
    The elements are compared using operator== (or pred, in version (2)).
    [元素间通过operator==进行比较(或者使用pred)]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    template <class InputIterator1, class InputIterator2>
    bool equal (InputIterator1 first1, InputIterator2 last1, InputIterator2 first2)
    {
        while(first1 != last1){
            if(!(*first1 == *first2))     // or: if (!pred(*first1,*first2)), for version 2
                return false;
            ++first1;    ++first2;
        }
        return true;
    }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    bool mypredicate(int i, int j)
    {
        return (i == j);
    }
    
    int main()
    {
        int myints[] = {20, 40, 60, 80, 100};
        std::vector<int> myvector(myints, myints+5);
    
        if(std::equal(myvector.begin(), myvector.end(), myints))
            std::cout<<"The contents of both sequences are equal.
    ";
        else
            std::cout<<"The contents of both sequences differ.
    ";
    
        myvector[3] = 81;
    
        if(std::equal(myvector.begin(), myvector.end(), myints, mypredicate))
            std::cout<<"The contents of both sequences are equal.
    ";
        else
            std::cout<<"The contents of both sequences differ.
    ";
    
        system("pause");
        return 0;
    }
    /*
    std::mismatch
    template <class InputIterator1, class InputIterator2>
    pair<InputIterator1, InputIterator2> mismatch (InputIterator1 first1, InputIterator1 last1, InputIterator1 first2);
    
    template <class InputIterator1, class InputIterator2, class BinaryPredicate>
    pair<InputIterator1, InputIterator2> mismatch (InputIterator1 first1, InputIterator1 last1, InputIterator1 first2, BinaryPredicate pred);
    
    Return first position where two ranges differ
    Compares the elements in the range [first1,last1) with those in the range beginning at first2, and returns the first element of both sequences that does not match.
    [比较[first1, last1)与[fist2, last2)之间的元素,并返回两者第一个不匹配的元素]
    The elements are compared using operator== (or pred, in version (2)).
    [元素间的比较通过operator==来进行(或者通过pred)]
    The function returns a pair of iterators to the first element in each range that does not match.
    [该函数的返回值类型是pair,其中的两个参数是指向两个区间中不匹配元素的迭代器]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    
    template <class InputIterator1, class InputIterator2>
    pair<InputIterator1, InputIterator2> mismatch (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2 )
    {
        while ( (first1!=last1) && (*first1==*first2) )  // or: pred(*first1,*first2), for version 2
        { ++first1; ++first2; }
        return std::make_pair(first1,first2);
    }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <utility>    //std::pair
    
    bool mypredicate(int i, int j){
        return (i==j);
    }
    
    int main()
    {
        std::vector<int> myvector;
        for(int i=1; i<6; i++)    myvector.push_back(i*10);
    
        int myints[] = {10, 20, 40, 320, 1024};
    
        std::pair<std::vector<int>::iterator, int*> mypair;
    
        // using default comparison
        mypair = std::mismatch(myvector.begin(), myvector.end(), myints);
        std::cout<<"First mismatch elements: "<<*mypair.first<<" and "<<*mypair.second<<'
    ';
    
        // using predicate comparison
        mypair = std::mismatch(++mypair.first, myvector.end(), ++mypair.second, mypredicate);
        std::cout<<"Second mismatch elements: "<<*mypair.first<<" and "<<*mypair.second<<'
    ';
    
        system("pause");
        return 0;
    }
    /*
     template <class ForwardIterator1, class ForwardIterator2>
     ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator1 first2, ForwardIterator1 last2);
     
     template <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate>
     ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator1 first2, ForwardIterator1 last2, BinaryPredicate pred);
     
     Search range for subsequence
     Searches the range [first1,last1) for the first occurrence of the sequence defined by [first2,last2), and returns an iterator to its first element, or last1 if no occurrences are found.
     [在[first1, last1)中搜索第一个与序列[first2, last2)相匹配的子序列,并返回指向搜索到的子序列的第一个元素的迭代器,如果没有搜索到则返回last1]
     The elements in both ranges are compared sequentially using operator== (or pred, in version (2)): A subsequence of [first1,last1) is considered a match only when this is true for all the elements of [first2,last2).
     [元素的比较是通过operator==来进行的(或者通过pred)]
     This function returns the first of such occurrences. For an algorithm that returns the last instead, see find_end.
     [该函数返回第一个与给定序列匹配的子序列,如果想要返回最后一个,请参看find_end.]
     The behavior of this function template is equivalent to:
     [该函数模板的行为等价于以下操作:]
     
     template <class ForwardIterator1, class ForwardIterator1>
     ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator1 first2, ForwardIterator1 last2)
     {
         if(first2 == last2)    return first1;    // specified in C++11
     
         while(first1 != last1)
         {
             ForwardIterator1 it1 = first1;
             ForwardIterator2 it2 = first2;
             while(*it1 == *it2){    // or pred(*it1, *it2) for verson 2
                 ++it1;    ++it2;
                 if(it2 == last2)    return first1;
                 if(it1 == last1)    return last1;
             }
             ++first1;
         }
         return last1;
     }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    bool mypredicate(int i, int j){
        return (i==j);
    }
    
    int main()
    {
        std::vector<int> myvector;
        for(int i=1; i<10; i++)    myvector.push_back(i*10);
        std::vector<int>::iterator it;
    
        // using default comparison.
        int needle1[] = {40, 50, 60, 70};
        it = std::search(myvector.begin(), myvector.end(), needle1, needle1+4);
    
        if(it != myvector.end())
            std::cout<<"needle1 found at position "<<it-myvector.begin()<<'
    ';
        else
            std::cout<<"needle1 not found.
    ";
    
        // using predicate comparison.
        int needle2[] = {20, 30, 50};
        it = std::search(myvector.begin(), myvector.end(), needle2, needle2+3, mypredicate);
    
        if(it != myvector.end())
            std::cout<<"needle2 found at position "<<it-myvector.begin()<<'
    ';
        else
            std::cout<<"needle2 not found.
    ";
    
        system("pause");
        return 0;
    }
    /*
    template <class ForwardIterator, class Size, class T>
    ForwardIterator search_n (ForwardIterator first, ForwardIterator last, Size count, const T& val);
    
    template <class ForwardIterator, class Size, class T, class BinaryPredicate>
    ForwardIterator search_n (ForwardIterator first, ForwardIterator last, Size count, const T& val, BinaryPredicate pred);
    
    Search range for elements
    Searches the range [first,last) for a sequence of count elements, each comparing equal to val (or for which pred returns true).
    [在[first, last)中搜索是否连续出现count次val]
    The function returns an iterator to the first of such elements, or last if no such sequence is found.
    [该函数返回指向第一个等于val的元素的迭代器,如果没有找到则返回last]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    
    template<class ForwardIterator, class Size, class T>
    ForwardIterator search_n (ForwardIterator first, ForwardIterator last, Size count, const T& val)
    {
        ForwardIterator it, limit;
        Size i;
    
        limit=first; std::advance(limit,std::distance(first,last)-count);  //注:私认为应该是std::advance(limit, std::distance(first, last)-count+1)
    
        while (first!=limit)
        {
            it = first; i=0;
            while (*it==val)       // or: while (pred(*it,val)) for the pred version
                { ++it; if (++i==count) return first; }
            ++first;
        }
        return last;
    }
    */
    
    #include <iostream>     // std::cout
    #include <algorithm>    // std::search_n
    #include <vector>       // std::vector
    
    bool mypredicate (int i, int j) {
        return (i==j);
    }
    
    int main () {
        int myints[]={10,20,30,30,20,10,10,20};
        std::vector<int> myvector (myints,myints+8);
    
        std::vector<int>::iterator it;
    
        // using default comparison:
        it = std::search_n (myvector.begin(), myvector.end(), 2, 30);
    
        if (it!=myvector.end())
            std::cout << "two 30s found at position " << (it-myvector.begin()) << '
    ';
        else
            std::cout << "match not found
    ";
    
        // using predicate comparison:
        it = std::search_n (myvector.begin(), myvector.end(), 2, 10, mypredicate);
    
        if (it!=myvector.end())
            std::cout << "two 10s found at position " << int(it-myvector.begin()) << '
    ';
        else
            std::cout << "match not found
    ";
    
        system("pause");
        return 0;
    }
    /*
    std::count
    template <class InputIterator, class T>
    typename iterator_traits<InputIterator>::difference_type count (InputIterator first, InputIterator last, const T& val);
    
    Count appearances of value in range
    Returns the number of elements in the range [first,last) that compare equal to val.
    [返回[first, last)中与val相等的元素的个数]
    The function uses operator== to compare the individual elements to val.
    [该函数使用operator==来判断元素是否等于val]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    template <class InputIterator, class T>
        typename iterator_traits<InputIterator>::difference_type
            count (InputIterator first, InputIterator last, const T& val)
    {
         typename iterator_traits<InputIterator>::difference_type ret = 0;
         while(first != last){
            if(*first == val) ++ret;
            ++first;
        }
        return ret;
    }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    
    int main()
    {
        int myints[] = {10, 20, 30, 30, 20, 10, 10, 20};
        int mycount = std::count(myints, myints+8, 10);
        std::cout<<"10 appears "<<mycount<<" times.
    ";
    
        std::vector<int> myvector(myints, myints+8);
        mycount = std::count(myvector.begin(), myvector.end(), 20);
        std::cout<<"20 appears "<<mycount<<" times.
    ";
    
        system("pause");
        return 0;
    }
    /*
    template <class InputIterator, class UnaryPredicate>
    typename iterator_traits<InputIterator>::difference_type count_if (InputIterator first, InputIterator last, UnaryPredicate pred);
    
    Return number of elements in range satisfying condition
    [返回区间中满足条件的元素个数]
    Returns the number of elements in the range [first,last) for which pred is true.
    [返回[first, last)中使得pred返回真的元素个数]
    The behavior of this function template is equivalent to:
    [该函数模板的行为等价于以下操作:]
    
    template <class InputIterator, class UnaryPredicate>
    typename iterator_traits<InputIterator>::difference_type count_if (InputIterator first, InputIterator last, UnaryPredicate pred)
    {
        typename iterator_traits<InputIterator>::difference_type ret = 0;
        while(first != last)
        {
            if(pred(*first))    ++ret;
            first++;
        }
        return ret;
    }
    */
    
    #include <iostream>
    #include <algorithm>
    #include <map>
    #include <string>
    #include <utility>
    
    class stuRecord
    {
    public:
        class stuInfo
        {
        public:
            void setName(std::string m_name) {name = m_name;}
            void setAge(int m_age) {age = m_age;}
            void setAddr(std::string m_addr) {addr = m_addr;}
    
            std::string getName() const {return name;}
            int getAge() const {return age;}
            std::string getAddr() const {return addr;}
    
        private:
            std::string name;
            int age;
            std::string addr;
        };
    
    private:
        int id;
        stuInfo m_stuInfo;
    
    public:
        stuRecord(int m_id, std::string m_name, int m_age, std::string m_addr)
        {
            id = m_id;
            m_stuInfo.setName(m_name);
            m_stuInfo.setAge(m_age);
            m_stuInfo.setAddr(m_addr);
        }
    
        int getId() const {return id;}
        stuInfo getStuInfo() const {return m_stuInfo;}
    };
    
    typedef stuRecord::stuInfo stuRI;
    
    bool setRange(std::pair<int, stuRI> stu)
    {
        return ((stu.second.getAge() > 20) && (stu.second.getAge() < 30));
    }
    
    int main()
    {
        stuRecord stu1(1, "张三", 21, "上海");
        stuRecord stu2 = stuRecord(2, "李四", 29, "上海");  
        stuRecord stu3 = stuRecord(3, "王五", 12, "深圳");  
        stuRecord stu4 = stuRecord(4, "赵六", 25, "长沙");  
        stuRecord stu5 = stuRecord(5, "孙七", 30, "广东"); 
    
        std::map<int, stuRI> mymap;
        mymap.insert(std::make_pair(stu1.getId(), stu1.getStuInfo()));
        mymap.insert(std::make_pair(stu2.getId(), stu2.getStuInfo()));
        mymap.insert(std::make_pair(stu3.getId(), stu3.getStuInfo()));
        mymap.insert(std::make_pair(stu4.getId(), stu4.getStuInfo()));
        mymap.insert(std::make_pair(stu5.getId(), stu5.getStuInfo()));
    
        int mycount = std::count_if(mymap.begin(), mymap.end(), setRange);
        std::cout<<"The number of students whose age between 20 and 30 is "<<mycount<<'
    ';
    
        system("pause");
        return 0;
    }
  • 相关阅读:
    golang的缓冲channel简单使用
    golang协程同步的几种方法
    红黑树原理详解及golang实现
    go路由httprouter中的压缩字典树算法图解及c++实现
    golang编译源代码和交叉编译方法
    cmake使用笔记
    如何用redis设计数据库初探
    muduo学习笔记(六) 多线程的TcpServer
    利用 Blob 处理 node 层返回的二进制文件流字符串并下载文件
    数据量庞大的分页穿梭框实现
  • 原文地址:https://www.cnblogs.com/kevinq/p/4622933.html
Copyright © 2020-2023  润新知