【头文件】<algorithm>
【源码】
// find
template <class _InputIter, class _Tp>inline _InputIter find(_InputIter __first, _InputIter __last,
const _Tp& __val,
input_iterator_tag)
{
while (__first != __last && !(*__first == __val))
++__first;
return __first;
}
可以看到,在使用find函数时,如,vector<T>::iterator it = find(iterFirst, iterLast, target)。find函数只在[iterFirst, iterLast)这样一个半开半闭的区间内搜索。所以,我们常用if(it == iterLast)来检测是否查找到目标值。
举例:
int target = 1;
int data[3] = {1, 2, 3};
vector<int> v(data, data+3);
vector<int>::iterator it = find(v.begin(), v.end(), target); //注意:v.end()返回的迭代器指向的是v最后一个元素的下一个地址,即3后面的一个地址。该地址可能未被分配,直接访问有可能出错
if(it == v.end()){
cout<<"not found"<<endl; //没找到
}