template<class ForwardIterator, class T>
ForwardIterator remove(ForwardIterator first, ForwardIterator last,
const T& value);
template<class ExecutionPolicy, class ForwardIterator, class T>
ForwardIterator remove(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
const T& value);
template<class ForwardIterator, class Predicate>
ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
Predicate pred);
template<class ExecutionPolicy, class ForwardIterator, class Predicate>
ForwardIterator remove_if(ExecutionPolicy&& exec,
ForwardIterator first, ForwardIterator last,
Predicate pred);
Requires:
The type of
*first
shall satisfy the
MoveAssignable
requirements (Table
25)
. Effects:
Eliminates all the elements referred to by iterator
i
in the range
[first, last)
for which the following corresponding conditions hold:
*i == value, pred(*i) != false. Returns:
The end of the resulting range
. Complexity:
Exactly
last - first
applications of the corresponding predicate
. [
Note: Each element in the range
[ret, last), where
ret is
the returned value, has a valid but unspecified state, because the algorithms
can eliminate elements by moving from elements that were originally
in that range
. —
end note ]
template<class InputIterator, class OutputIterator, class T>
OutputIterator
remove_copy(InputIterator first, InputIterator last,
OutputIterator result, const T& value);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class T>
ForwardIterator2
remove_copy(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, const T& value);
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator
remove_copy_if(InputIterator first, InputIterator last,
OutputIterator result, Predicate pred);
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class Predicate>
ForwardIterator2
remove_copy_if(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, Predicate pred);
Requires:
The ranges
[first, last)
and
[result, result + (last - first))
shall not overlap
. The expression
*result = *first shall be valid
. [
Note: For the overloads with an
ExecutionPolicy, there may be a performance
cost if
iterator_traits<ForwardIterator1>::value_type is not
MoveConstructible (Table
23)
. —
end note ]
Effects:
Copies all the elements referred to by the iterator
i
in the range
[first, last)
for which the following corresponding conditions do not hold:
*i == value, pred(*i) != false. Returns:
The end of the resulting range
. Complexity:
Exactly
last - first
applications of the corresponding predicate
.