STL算法之find

定義

template <class InputIterator, class T>
InputIterator find (InputIterator first, InputIterator last, const T& val);

做用

在範圍[first, last]之間查找第一個等於val的元素。找到則返回第一個匹配元素的iterator,不然返回last迭代器。
此函數使用operator==來逐個比較元素和val。
改函數模板等效以下:ios

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

參數

first,last

輸入迭代器,分別做爲squence起始和終止位置。在範圍[first,last)內搜索,包含first,不包含last函數

val

在範圍內搜索的值。T是支持和InputIterator經過操做符==進行比較操做的類型(元素在操做符的左邊,val在其右邊)spa

返回值

當==比較操做爲true時,返回第一個元素的迭代器。不然返回lastcode

示例

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main( int argc, char **argv )
{
    vector<int>::iterator ret;
    vector<int> numbers{1, 2, 7, 2,3};

    //出現一次
    ret = find(numbers.begin(), numbers.end(), 1);
    if ( ret == numbers.end() )
    {
        cout << "not found 1" << endl;
    }
    else
    {
        cout << "found 1" << endl;
    }

    //出現屢次
    ret = find(numbers.begin(), numbers.end(), 2);
    if ( ret == numbers.end() )
    {
        cout << "not found 2" << endl;
    }
    else
    {
        //找到的是第一個元素
        cout << "found 2 and next element is:"<< *(ret+1) << endl;
    }

    //未出現
    ret = find(numbers.begin(), numbers.end(), 5);
    if ( ret == numbers.end() )
    {
        cout << "not found 5" << endl;
    }
    else
    {
        cout << "found 5" << endl;
    }

    return 0;
}
相關文章
相關標籤/搜索