SGI

移除

类别: 算法 组件类型: 函数

原型

template <class ForwardIterator, class T>
ForwardIterator remove(ForwardIterator first, ForwardIterator last,
                       const T& value);

描述

移除从范围中移除[first, last)所有等于value的元素。也就是说,移除返回一个迭代器new_last使得范围[first, new_last)不包含任何等于value的元素。[1] 范围中的迭代器[new_last, last)仍然都可以解引用,但它们指向的元素是未指定的。移除是稳定的,这意味着不等于value的元素的相对顺序不变。

定义

定义在标准头文件 algorithm 中,以及非标准的向后兼容头文件 algo.h 中。

类型要求

先决条件

复杂度

线性。移除执行精确的last - first相等比较。

示例

vector<int> V;
V.push_back(3);
V.push_back(1);
V.push_back(4);
V.push_back(1);
V.push_back(5);
V.push_back(9);

copy(V.begin(), V.end(), ostream_iterator<int>(cout, " "));
    // The output is "3 1 4 1 5 9".

vector<int>::iterator new_end = remove(V.begin(), V.end(), 1);
copy(V.begin(), new_end, ostream_iterator<int>(cout, " "));
    // The output is "3 4 5 9".

注释

[1] “移除”的含义有点微妙。移除不会销毁任何迭代器,也不会改变firstlast之间的距离。(它不可能做任何这样的事情。)因此,例如,如果V是一个 向量remove(V.begin(), V.end(), 0)不会改变V.size(): V将包含与之前一样多的元素。移除返回一个迭代器,它指向从其中移除元素后得到的范围的末尾;因此,该迭代器后面的元素不再重要,可以丢弃。如果要从 序列 中移除元素,可以简单地擦除它们。也就是说,从 序列 中移除元素的合理方法是S.erase(remove(S.begin(), S.end(), x), S.end()).

另请参见

remove_if, remove_copy, remove_copy_if, unique, unique_copy.
[Silicon Surf] [STL Home]
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。 商标信息