using STL to find all elements in a vector

前端 未结 7 658
时光取名叫无心
时光取名叫无心 2020-12-31 08:01

I have a collection of elements that I need to operate over, calling member functions on the collection:

std::vector v;
... // vector is popula         


        
相关标签:
7条回答
  • 2020-12-31 08:34

    I wrote a for_each_if() and a for_each_equal() which do what I think you're looking for.

    for_each_if() takes a predicate functor to evaluate equality, and for_each_equal() takes a value of any type and does a direct comparison using operator ==. In both cases, the function you pass in is called on each element that passes the equality test.

    /* ---
    
        For each
        25.1.1
    
            template< class InputIterator, class Function, class T>
                Function for_each_equal(InputIterator first, InputIterator last, const T& value, Function f)
    
            template< class InputIterator, class Function, class Predicate >
                Function for_each_if(InputIterator first, InputIterator last, Predicate pred, Function f)
    
        Requires:   
    
            T is of type EqualityComparable (20.1.1) 
    
        Effects:    
    
             Applies f to each dereferenced iterator i in the range [first, last) where one of the following conditions hold:
    
                1:  *i == value
                2:  pred(*i) != false
    
        Returns:    
    
            f
    
        Complexity: 
    
            At most last - first applications of f
    
        --- */
    
        template< class InputIterator, class Function, class Predicate >
        Function for_each_if(InputIterator first, 
                             InputIterator last, 
                             Predicate pred, 
                             Function f)
        {
            for( ; first != last; ++first)
            {
                if( pred(*first) )
                    f(*first);
            }
            return f;
        };
    
        template< class InputIterator, class Function, class T>
        Function for_each_equal(InputIterator first, 
                                InputIterator last, 
                                const T& value, 
                                Function f)
        {
            for( ; first != last; ++first)
            {
                if( *first == value )
                    f(*first);
            }
            return f;
        };
    
    0 讨论(0)
提交回复
热议问题