顺序容器中remove

紧接着上面几个转载的内容来写。只是这次写的是自己的使用。

由于stl中的remove函数是algorithm中的一个,因此在使用remove之前必须将该头文件库包含进来。

remove中有三个参数,第一个第二个分别是要操作的指针范围,第三个参数是元素内容。

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

 那么在使用中,如果有个vector变量中有若干个相同值的地方,而我们不想同时删除,因为有时候需要有些额外的操作,怎么办呢?

改变remove的三个参数中的指针范围,当然只能这么办。我用的方法是从后往前走,这样的话,就从后往前一个一个的删除。

#include <iostream.h>
#include <vector>
#include<algorithm>


using namespace std;

void main()
{
 int i;
 vector<int> arr;
 for (i=0; i<10; i++)
 {
  arr.push_back(i);
  if ((i%3==0))
  {
   arr.at(i)= 0;
  }
 }

 cout << " before deleted , size = " << arr.size() << endl;
 
 for ( i = 0; i < arr.size(); i++ )
 {
  
  cout << "i = " << i << " , " << arr[i] << endl;
  
 }
 
vector<int>::iterator iter;
  for (iter = arr.end()-1;  ; iter--)
 {
  if ((*iter == 0))
  {
   arr.erase(remove(iter,arr.end(),0),arr.end());
   // other compliments.
  //
    break;
  }
  if (iter==arr.begin())
  {
   break;
  }
 }

//  arr.erase(remove(arr.begin(),arr.end(),0),arr.end());
 cout << " after deleted , size = " << arr.size() << endl;
 
 for ( i = 0; i < arr.size(); i++ )
 {
  
  cout << "i = " << i << " , " << arr[i] << endl;
  
 }
}

 

这样子实验后,只删除了最后一个为0的元素。当然,如果需要删除完,则把break去掉即可。而在删除每个值为0的元素后,如果需要有其它操作的话,则在break前添加上相应的操作即可。

关键是充分理解remove和erase中每个参数的意义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值