STL 算法测试—find()方法

find()方法

在一个范围内查找一个值。

返回第一个 在[first,last ) 区间内查找到的相等的值(返回找到的第一个值)。如果没有找到,就返回last。

find()方法必须 operator== 用来对指定的值进行比较。

template<class InputIterator, class T>
  InputIterator find (InputIterator first, InputIterator last, const T& val)
{
  while (first!=last) {
    if (*first==val) return first;
    ++first;
  }
  return last;
}
使用注意事项:

1.简单的说只要是可以用来first指针可以用来迭代的区间或者容器都是可以使用这个算法的。。 

2.但是使用这个算法必须要重载operator== 所以容器不支持operator == 就不可以使用了。

3.find()算法是为了半封闭的容器空间设计的,如果封闭空间使用他的话就要注意了,这个等下在说。。 

4.如果在提供的范围内没有找到要比对的值,就会返回last。这个也分为封闭空间和半封闭空间两种情况,接下来测试find()算法。


算法测试环节:

算法测试代码来自c++puls上的算法篇,本文以上内容都是对C++puls上find方法的个人总结和翻译。


我们来测试下find返回的last的位置,在来理解下里面的坑。

测试目的:深入理解find方法的使用。

封闭空间:


返回的应该是last位置上的值。为了消除偶然性,也就是说,万一我要找的值是40,并且是在最后一位上,所以myints+4而不是myints+3来查找。就是为了多出一位,让查找的end并不是在40的位置上。

在半封闭空间里同理,


程序直接炸掉了。

可能想表达的意思没表达完全,写个总结:

1.在封闭空间里使用find()方法,有几个元素就收索几位。

2.不管是在半封闭空间还是封闭空间中使用find()都必须判断 返回的 last 是否等于end,就是判断last是否超出了空间范围。。。。。。。。。。。这个很重要 稍微不留神就会爆炸。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值