c++find函数

find函数

  • find用在容器中更加普遍,而algorithm中其实find函数只是一种

  • C++find函数原型:

1
2
3
4
5
6
7
8
9
10
11
12

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;
}
如果没找到对应的关键元素,会返回end(),最后一个元素的后一位。
  • 其中,find()算法的前两个参数都是某个容器的迭代器,用于指定查找的起始位置和终止位置;第三个参数就是要查找的内容,它的数据类型跟容器中数据的类型相同。这里需要注意的是,find()算法会利用“==”操作符将这里的目标内容跟容器中的数据元素进行相等比较,以确定某个元素是否符合条件,所以,这里的数据类型必须支持“==”操作符进行相等比较。对于基本数据类型而言,它们已经天然支持无需我们操心,如果是自定义的数据类型,则需要重载“==”操作符以支持相等比较。

各个容器自己实现的成员函数

  • vector没有实现find函数,除此之外,常见容器都实现了自己的find函数,如set,map,string
  • String是这一种顺序存储结构,其find函数返回的是下标索引。set,map,multiset,multimap都不是顺序索引的数据结构,所以返回的是迭代器。
  • 为什么返回的不是索引下标?这是因为索引下标是在数组这种连续存储的数据结构里面常见的,是一种顺序索引;而很多数据结构的存储并非连续的,不能实现顺序索引,为了兼顾所有的数据结构,所以返回的仅仅是指针或是迭代器。

    如果元素不在

  • 对于返回迭代器的查找,通过判断find(a.begin(),a.end(),value)==a.end(),来判断元素是否存在
  • 对于string,通过a.find(val)==string::npos判断

std::map::find

返回值

指向键等于 key 的元素的迭代器。若找不到这种元素,则返回尾后(见 end() )迭代器。

------ The Happy Ending ------