C++中find_if查找vector中的特定struct以及值域查询
博客搬家,原地址:https://langzi989.github.io/2017/07/15/C++%E4%B8%ADfind_if%E6%9F%A5%E6%89%BEvector%E4%B8%AD%E7%9A%84%E7%89%B9%E5%AE%9Astruct%E4%BB%A5%E5%8F%8A%E5%80%BC%E5%9F%9F%E6%9F%A5%E8%AF%A2/
由于struct不是C++中的内置类型所以不能用std::find直接查找,而且find函数不能满足值域的查询。这个时候需要使用find_if来进行查询。
1.find_if函数
find_if是一个模板函数,函数原型及函数定义:
template <class InputIterator, class Predicate>
InputIterator find_if(InputIterator first, InputIterator end, Predicate pred) {
while (first != last && !pred(*first)) ++first;
return first;
}
1.1 函数参数
- first : 起始迭代器
- end : 结束迭代器
- pred : 用于比较数值的函数或者函数对象(仿函数)。遍历条件即为pred()为真.
1.2 函数返回值
若有满足pred条件的元素,返回该元素的迭代器,否则返回end.
1.3 函数说明
该函数最重要的环节是pred,它的核心环节是重载()运算符,因为每个容器迭代器的*运算符得到的结果都是该容器的value_type的值,所以改重载函数的参数类型是value_type的引用类型。
1.4 find_if函数应用
在struct的vector中查找特定的对象.特别注意的是:仿函数的参数类型是值的const引用,但是f