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是否超出了空间范围。。。。。。。。。。。这个很重要 稍微不留神就会爆炸。