std::remove, std::remove_if

来自cppreference.com
< cpp‎ | algorithm

 
 
算法库
执行策略 (C++17)
不修改的序列操作
(C++11)
(C++11)
(C++11)
(C++17)
修改的序列操作
未初始化存储上的操作
划分操作
排序操作
(C++11)
二分查找操作
集合操作(在已排序范围上)
堆操作
(C++11)
最小/最大操作
(C++11)
(C++17)

重排
数值操作
C 库
 
定义于头文件 <algorithm>
template< class ForwardIt, class T >
ForwardIt remove( ForwardIt first, ForwardIt last, const T& value );
(1)
template< class ForwardIt, class UnaryPredicate >
ForwardIt remove_if( ForwardIt first, ForwardIt last, UnaryPredicate p );
(2)
移除范围[first, last)中满足特定条件的所有元素。
1) 移除所有等于value的元素。
2) 移除所有使一元谓词p返回true的元素.
原文:
Removes all elements satisfying specific criteria from the range [first, last). The first version removes all elements that are equal to value, the second version removes all elements for which predicate p returns true.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
卸下做是通过移动的元素的范围内以这样的方式,要被擦除的元素将被覆盖。元素之间的旧的和新的范围的两端有未指定的值。的迭代器返回到新的范围。被保留的元素的相对顺序.
原文:
Removing is done by shifting the elements in the range in such a way that elements to be erased are overwritten. The elements between the old and the new ends of the range have unspecified values. An iterator to the new end of the range is returned. Relative order of the elements that remain is preserved.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

目录

[编辑] 参数

first, last -
元素的范围内进行处理
原文:
the range of elements to process
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
value -
要移除的元素的值
原文:
the value of elements to remove
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
p -
如果元素应该被删除
原文:
if the element should be removed
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。
则返回 true 的一元谓词。

谓词函数签名应等价于如下者:

 bool pred(const Type &a);

签名不必拥有 const & ,但函数必须不修改传递给它的对象。
类型 Type 必须使得 ForwardIt 类型对象能在解引用后隐式转换到 Type 。 ​

类型要求
-
ForwardIt 必须满足 ForwardIterator 的要求。
-
解引用 ForwardIt 结果的类型必须满足 MoveAssignable 的要求。

[编辑] 返回值

迭代器新的范围
原文:
Iterator to the new end of the range
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 复杂度

究竟std::distance(first, last)的谓词中的应用.
原文:
Exactly std::distance(first, last) applications of the predicate.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 注释

类似的命名容器的成员函数list::removelist::remove_ifforward_list::removeforward_list::remove_if删除删除的元素.
原文:
The similarly-named container member functions list::remove, list::remove_if, forward_list::remove, and forward_list::remove_if erase the removed elements.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

[编辑] 可能的实现

版本一
template<class ForwardIt, class T>
ForwardIt remove(ForwardIt first, ForwardIt last, 
                       const T& value)
{
    ForwardIt result = first;
    for (; first != last; ++first) {
        if (!(*first == value)) {
            *result++ = *first;
        }
    }
    return result;
}
版本二
template<class ForwardIt, class UnaryPredicate>
ForwardIt remove_if(ForwardIt first, ForwardIt last, 
                          UnaryPredicate p)
{
    ForwardIt result = first;
    for (; first != last; ++first) {
        if (!p(*first)) {
            *result++ = *first;
        }
    }
    return result;
}

[编辑] 示例

下面的代码从一个字符串中删除所有的空格,将它们移动到结尾的字符串,然后删除.
原文:
The following code removes all spaces from a string by moving them to the end of the string and then erasing.
文本通过谷歌翻译机器翻译。
你可以帮忙校正和验证翻译。点击此处查看指示。

#include <algorithm>
#include <string>
#include <iostream>
int main()
{
    std::string str = "Text with some   spaces";
    str.erase(std::remove(str.begin(), str.end(), ' '),
              str.end());
    std::cout << str << '\n';
}

输出:

Textwithsomespaces

[编辑] 另请参阅

复制一个范围内不满足特定条件的元素
(函数模板) [编辑]