function template
std::remove
<algorithm>
template < class ForwardIterator, class T >
ForwardIterator remove ( ForwardIterator first, ForwardIterator last,
const T& value );
Remove value from range
Compares the elements in the range
[first,last) against
value, and removes those that compare equal from the resulting range. The resulting range consists of the elements between
first and the iterator returned by the function, which points to the new end of the range.
The relative order of the elements not removed is preserved, while the elements past the new end of range are still valid, although with unspecified values.
The behavior of this function template is equivalent to:
1 2 3 4 5 6 7 8
|
template < class ForwardIterator, class T >
ForwardIterator remove ( ForwardIterator first, ForwardIterator last, const T& value )
{
ForwardIterator result = first;
for ( ; first != last; ++first)
if (!(*first == value)) *result++ = *first;
return result;
}
|
Notice that in this example implementation the elements past the new end are not altered, but alternative implementations may change their values.
Parameters
- first, last
- Forward iterators to the initial and final positions in a sequence. The range used is [first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.
- value
- Value to be removed.
Return value
A forward iterator pointing to the new end of the range that includes all the elements with a value that does not compare equal to
value.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
// remove algorithm example
#include <iostream>
#include <algorithm>
using namespace std;
int main () {
int myints[] = {10,20,30,30,20,10,10,20}; // 10 20 30 30 20 10 10 20
// bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^
pend = remove (pbegin, pend, 20); // 10 30 30 10 10 ? ? ?
// ^ ^
cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
cout << " " << *p;
cout << endl;
return 0;
}
|
Output:
range contains: 10 30 30 10 10
|
Complexity
Performs as many comparisons as the number of elements in the range
[first,last), and at most as many assignment operations.
See also
- remove_if
- Remove elements from range (function template
)
- remove_copy
- Copy range removing value (function template
)
- replace
- Replace value in range (function template)
- count
- Count appearances of value in range (function template)
- find
- Find value in range (function template)