std::remove_copy, std::remove_copy_if

From Cppreference

Jump to: navigation, search
Defined in header <algorithm>

template< class InputIterator, class OutputIterator, class T >

OutputIterator remove_copy( InputIterator first,
                            InputIterator last,
                            OutputIterator d_first,

                            const T& value );
(1)
template< class InputIterator, class OutputIterator, class UnaryPredicate >

OutputIterator remove_copy_if( InputIterator first,
                               InputIterator last,
                               OutputIterator d_first,

                               UnaryPredicate p );
(2)

Copies elements from the range [first, last), to another range beginning at d_first, omitting the elements which satisfy specific criteria. The first version ignores the elements that are equal to value, the second version ignores the elements for which predicate p returns true.

Contents

Parameters

first, last - the range of elements to copy
d_first - the beginning of the destination range
value - the value of the elements not to copy

Return value

iterator to the element past the last element copied.

Complexity

linear in the distance between first and last

Equivalent function

First version:
template<class InputIterator, class OutputIterator, class T>
OutputIterator remove_copy(InputIterator first,
                           InputIterator last,
                           OutputIterator d_first,
                           const T& value)
{
    for (; first != last; ++first)
        if (!(*first == value)) {
            *d_first++ = *first;
        }
    }
    return d_first;
}
Second version:
template<class InputIterator, class OutputIterator, class UnaryPredicate>
OutputIterator remove_copy_if(InputIterator first,
                              InputIterator last,
                              OutputIterator d_first,
                              UnaryPredicate p)
{
    for (; first != last; ++first)
        if (!p(*first)) {
            *d_first++ = *first;
        }
    }
    return d_first;
}

Example

See also

remove
remove_if
removes elements satisfying specific criteria
(function template)
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox
In other languages