类别:算法 | 组件类型:函数 |
template <class InputIterator, class OutputIterator> OutputIterator unique_copy(InputIterator first, InputIterator last, OutputIterator result); template <class InputIterator, class OutputIterator, class BinaryPredicate> OutputIterator unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate binary_pred);
有两个不同版本的unique_copy原因是对于连续元素组如何定义为重复项,存在两种不同的定义。在第一个版本中,测试是简单的相等:范围中的元素[f, l)当范围中的每个迭代器时都会重复i例如i == f或者*i == *(i-1)。在第二个版本中,测试是任意 Binary Predicatebinary_pred:中的元素[f, l)当范围中的每个迭代器时都会重复i例如i == f或者binary_pred(*i, *(i-1))是true. [1]
const int A[] = {2, 7, 7, 7, 1, 1, 8, 8, 8, 2, 8, 8}; unique_copy(A, A + sizeof(A) / sizeof(int), ostream_iterator<int>(cout, " ")); // The output is "2 7 1 8 2 8".
[1]严格来讲,unique_copy的第一个版本是多余的:你可以使用一个类对象来实现相同的功能equal_to作为 Binary Predicate 参数。提供第一个版本完全是为了方便:测试相等是一个重要的特例。
[2] BinaryPredicate无须等于关系。但是,在使用unique_copy含一个二元谓词(不等于关系)时要谨慎:可能会得到意外的结果。