c++ find函数用法

转:http://www.cnblogs.com/kaituorensheng/p/4072901.html (C++中find函数)

http://blog.csdn.net/huangyimin/article/details/6133650 (用于vector的find函数及STL的理解笔记)

find函数主要实现的是在容器内查找指定的元素,并且这个元素必须是基本数据类型的。查找成功返回一个指向指定元素的迭代器,查找失败返回end迭代器。

注意:

  • find() 不属于 vector 的成员,而存在于算法中,应加上头文件 #include <algorithm>
  • string::find 这类型的函数,返回值类型都是 string::size_type (或者写为 size_t 型), 而 string::size_type 其实是一种 unsigned int 类型。find 的结果记录匹配的位置,或者返回一个名为 string::npos 的特殊值,说明查找没有匹配。string 类将 npos 定义为保证大于任何有效下标的值。string::npos 的值是无符号型类型的,其值是(unsigned int)(-1),也就是4294967295

头文件

#include <algorithm>

函数实现

复制代码
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(vector)

复制代码
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
    vector<string> m;
    m.push_back("hello");
    m.push_back("hello2");
    m.push_back("hello3");
    if (find(m.begin(), m.end(), "hello") == m.end())
        cout << "no" << endl;
    else
        cout << "yes" << endl;
}
复制代码

例2(set)

复制代码
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;

int main()
{
    set<string> m;
    m.insert("hello");
    m.insert("hello2");
    m.insert("hello3");
    if (find(m.begin(), m.end(), "hello") == m.end())
        cout << "no" << endl;
    else
        cout << "yes" << endl;
}
复制代码

1:set自身有个find函数,举例如下:

复制代码
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
using namespace std;

int main()
{
    set<string> m;
    m.insert("hello");
    m.insert("hello2");
    m.insert("hello3");
    if (find(m.begin(), m.end(), "hello") == m.end())
        cout << "no" << endl;
    else
        cout << "yes" << endl;
}
复制代码

2:string自身有个find函数,举例如下:

复制代码
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int main()
{
    string s = "helllo";
    if (s.find("e") == string::npos)  //yes
        cout << "no" << endl;
    else
        cout << "yes" << endl;

    if (s.find("z") == string::npos)  //no
        cout << "no" << endl;
    else
        cout << "yes" << endl;
}
复制代码
原文地址:https://www.cnblogs.com/sylar5/p/6496693.html