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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL中的`remove`函数是用来从一个容器中删除指定的元素的。它和`remove_if`函数很相似,但是不需要访问容器元素的持有者。因此,如果你想要真正从容器中删除元素,你需要结合使用`remove`和`erase`函数。在`list`中,`remove`函数的行为类似于`erase-remove`惯用法,它真正地删除了元素并且比`erase-remove`更高效。此外,`list`中的`unique`函数也类似于`remove`,可以删除邻近的重复值,并且比`erase-unique`更高效。 然而需要注意的是,`remove`函数只是虚假地删除元素,它并不改变容器的大小。如果你想要真正地删除元素并且改变容器的大小,你需要结合使用`remove`和`erase`函数。 在使用`remove`函数时,经常将其返回值作为`erase`函数的第一个参数传递,这是一种常见的惯用法。事实上,`remove`函数和`erase`函数是紧密相关的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [STLremove算法详解](https://blog.csdn.net/wangdamingll/article/details/53634840)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [STL函数——remove函数](https://blog.csdn.net/qq_44166630/article/details/116497254)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值