一. 概述
移除性算法是在一区间内移除某些元素,这些算法并不能改变元素的数量,它们只是以逻辑上的思考,将原本置于后面的“不移除元素”向前移动,覆盖那些被移除元素而已。它们都返回新区间的逻辑终点。
remove() | 将等于某特定值的元素全部移除 |
remove_if() | 将满足某准则的元素全部移除 |
remove_copy() | 将不等于某特定值的元素全部复制到它处 |
remove_copy()_if() | 将不满足某准则的元素全部复制到它处 |
unique() | 移除毗邻的重复元素 |
unique_copy() | 移除毗邻的重复元素,并复制到它处 |
1. 移除某序列内的元素
//移除区间[beg, end)中每一个与value相等的元素
ForwardIterator
remove (ForwardIterator beg, ForwardIterator end,
const T& value)
//移除区间[beg, end)中每一个令op(elem)为true的元素
ForwardIterator
remove_if (ForwardIterator beg, ForwardIterator end,
UnaryPredicate op)
2. 复制时一并移除元素
//将源区间[beg, end)内所有元素复制到以destBeg为起点的目标区间去,
//并在复制过程中移除与value相等的所有元素
OutputIterator
remove_copy (InputIterator sourceBeg, InputIterator sourceEnd,
OutputIterator destBeg,
const T& value)
//两个算法都返回目标区间中最后一个被复制元素的下一位置
OutputIterator
remove_copy_if (InputIterator sourceBeg, InputIterator sourceEnd,
OutputIterator destBeg,
UnaryPredicate op)
三. 移除重复元素
1. 移除连续重复元素
//移除连续重复的元素,源序列必须是已排序的
void
unique (ForwardIterator beg, ForwardIterator end)
void
unique (Forwardlterator beg, ForwardIterator end,
BinaryPredicate op)
2. 复制过程中移除重复元素
//将源区间[sourceBeg, sourceEnd)内的元素复制到以destBeg起始的目标区间
//并移除重复元素
OutputIterator
unique_copy (InputIterator sourceBeg, InputIterator sourceEnd,
OutputIterator destBeg)
//两个算法都返回目标区间内最后一个被复制的元素的下一个位置
OutputIterator
unique_copy (InputIterator sourceBeg, InputIterator sourceEnd,
OutputIterator destBeg,
BinaryPredicate op)