函数模板

  std::remove                    头文件<algorithm>

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

  从一个范围中删除某值

  [注释:本文是 std::remove 算法的参考手册,关于 <cstdio.h> 头文件下的 remove 函数,请参见:http://www.cplusplus.com/reference/cstdio/remove/]

  对范围 [first , last ) 进行转换(transform),移除其中所有与 val 相等的元素,返回一个指向新范围的 end 的迭代器。

  (译注:transform 是 STL 的一个算法,不知道 std::remove 的底层是否经由 std::transform 实现。)

  函数不改变所包含的“范围对象”的属性(换句话说,函数不改变数组或者容器的真实 size ):元素被移动是通过下一个不等于 val 的元素,来替换当前等于 val 的元素,而且会通过返回一个指向新 end 的迭代器,来指示出新的稍“短”一些的范围(返回的迭代器所指向的元素是新的 past-the-end 元素)。

  元素间的顺序不会改变。介于返回的迭代器和 last 迭代器间的元素仍然有效,但是状态是未定义的。

  函数使用 operator== 来逐个比较元素与 val 是否相等。

  C++11下或如何实现

  元素的替换通过 move-assigning 一个新值来实现。

  可能通过如下函数模板来实现:

 template <class ForwardIterator, class T>
ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val)
{
ForwardIterator result = first;
while (first!=last) {
if (!(*first == val)) {
*result = move(*first);
++result;
}
++first;
}
return result;
}

  函数形参

  # first,last

  指向 move-assignable 序列首部和尾部的前向迭代器,用它们来支持元素和类型为 T 的值进行比较。迭代器指向的范围是 [ first, last ),这包括了 first 和 last 之间—— first 所指向的元素和 last 之前的元素。

  # val

  将被移除的元素的值。

  返回值

  一个指向最后一个没被移除的元素的迭代器。

  first 和这个迭代器的范围之间,包括了所有不等于 val 的元素。

  使用示例

 // remove algorithm example
#include <iostream> // std::cout
#include <algorithm> // std::remove int main () {
int myints[] = {,,,,,,,}; // 10 20 30 30 20 10 10 20 // bounds of range:
int* pbegin = myints; // ^
int* pend = myints+sizeof(myints)/sizeof(int); // ^ ^ pend = std::remove (pbegin, pend, ); // 10 30 30 10 10 ? ? ?
// ^ ^
std::cout << "range contains:";
for (int* p=pbegin; p!=pend; ++p)
std::cout << ' ' << *p;
std::cout << '\n'; return ;
}

  输出:

range contains:     

  复杂度

  复杂度是与 first 和 last 之间的距离(C++ STL 的函数)线性相关,即函数调用会与每一个元素进行比较,而且可能对其中的一些元素进行赋值。

  数据簇

  函数会访问、可能修改 [ first , last ) 范围之间的对象。

  异常

  元素比较(element comparisons)时可能抛出异常,元素赋值或者赋值操作作用于迭代器时,可能抛出异常。

  注意,对于无效的参数会造成未定义的行为。

  参阅

  remove_if  

  remove_copy  

  replace

  count

  find

  原文地址:http://www.cplusplus.com/reference/algorithm/remove/

最新文章

  1. [物理学与PDEs]第3章 磁流体力学
  2. [Java] webservice soap,wsdl 例子
  3. javascript-01
  4. Java静态代理和动态代理
  5. React+ES6+Webpack环境配置
  6. php基本函数
  7. git实用攻略(二)
  8. WEB 集群与负载均衡(一)基本概念-上
  9. python练习题3:N的多次方
  10. OC协议、代理的简单使用
  11. 【原创】分布式之redis的三大衍生数据结构
  12. C10K问题
  13. SPLAY,LCT学习笔记(三)
  14. C# sha256 加密算法
  15. Oracle中Blob和Clob
  16. splice的多种用法
  17. 设计模式笔记-观察者(Observer)
  18. Multiline ComboBox
  19. mongodb 副本集+分片集群搭建
  20. window下安装Node.js NPM

热门文章

  1. 蓝桥杯 - 数字排列(今有7对数字) - [两种不同的DFS思路]
  2. POJ 3280 - Cheapest Palindrome - [区间DP]
  3. python3学习笔记(3)_dict-set
  4. getopts shell command -options parameters
  5. LoadRunner-关联问题(栏目列表较多关联不了想要的id)
  6. 在linux下使用sqlcmd
  7. Selenium定位元素-Xpath的使用方法
  8. for与while的特点及其if在什么情况下使用情况
  9. mysql 备份脚本
  10. soapUI-JDBC Request