STL remove

本文内容来自C++Plus,本文只是本人的总结和翻译而已。本人只是C++的搬运工。

原文传送门:http://www.cplusplus.com/reference/algorithm/remove/

remove算法:在范围区间内删除值。

值得注意的是这个remove算法是STL里面的,和API remove不是同一个东西。

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

拿着迭代器First里面的每个值和需要remove 的value进行比较,并且在算法结束的时候返回新的迭代器的末尾位置。

remove算法是不会改变数组容器大小的,也不会改变容器内包含的元素的属性。也不会改变没有被删除的元素的顺序,当遍历完成后会返回新的迭代器末尾位置的元素。

注意:

1.remove算法是不会改变容器的大小的,所以就算删除掉了元素,但是空间范围内最后位置上的元素位置依然保存,只是变成了垃圾值。。。

2.最需要注意的是remove算法的返回值,他所返回的是新的迭代器的最后一个元素的位置上的指针。

测试代码如下:

#include <iostream>     // std::cout
#include <algorithm>    // std::remove

int main () {
  int myints[] = {10,20,30,30,20,10,10,20};      // 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, 20);         // 10 30 30 10 10 ?  ?  ?
                                                 // ^              ^
  std::cout << "range contains:";
  for (int* p=pbegin; p!=pend; ++p)
    std::cout << ' ' << *p;
  std::cout << '\n';

  return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值