[STL] algorithm中find系列函数总结

11 篇文章 0 订阅

C++ algorithm中find系列函数总结

主要是对find , find_first_of , find_end , find_if , find_if_not这五函数做个总结:

#include<iostream>
#include<map>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

bool isOld(int a) {
	if ((a % 2) == 0)
		return true;
	else
		return false;
}
bool isSmall(int a, int b) {
	if (a < b)
		return true;
	else
		return false;
}
bool isEqual(int a, int b) {
	if (a == b)
		return true;
	else
		return false;
}
int main() {
	vector<int> ivec = { 1,2,3,4,5,1,2,3,4,5 };
	vector<int>::iterator iter;
	vector<int> jvec = { 3 };
	vector<int> kvec = { 3,4 };
	
	iter = find(ivec.begin(), ivec.end(), 5);//1

	iter = find_if(ivec.begin(), ivec.end(), isOld);//2
	iter = find_if_not(ivec.begin(), ivec.end(), isOld);//3
	
	iter = find_first_of(ivec.begin(), ivec.end(), kvec.begin(), kvec.end());//4
	iter = find_first_of(ivec.begin(), ivec.end(), kvec.begin(), kvec.end(), isEqual);//5
	
	iter = find_end(ivec.begin(), ivec.end(), jvec.begin(),jvec.end());//6
	iter = find_end(ivec.begin(), ivec.end(), kvec.begin(), kvec.end(), isSmall);//7
}

首先,find函数就是从一个迭代器范围中查找第一个匹配的单个元素,如1,在ivec中查找第一次匹配5的迭代器,返回指向第一个5的迭代器,
详见:http://www.cplusplus.com/reference/algorithm/find/?kw=find

find_if是从头开始,匹配自定义函数,这个函数接受一个参数(来自前面的序列,顺序相同),返回bool值,来自定义一些判断,如2,我添加了一个判断是否为偶数的函数,在ivec中查找第一个为偶数的迭代器,返回指向第一个2的迭代器。
详见:http://www.cplusplus.com/reference/algorithm/find_if/

find_if_not则是从头开始查找第一个不匹配自定义函数,和find_if相反,如3,查找第一个不为偶数的迭代器,返回指向第一个1的迭代器。
详见:http://www.cplusplus.com/reference/algorithm/find_if_not/

find_first_of函数是从一个迭代器范围中查找第一个匹配的迭代器范围,有两种用法,一是直接比较两个迭代器范围是否相等,如4,在ivec中查找kvec,返回指向第一个3的迭代器;还有一种用法是再加一个自定义比较函数,这个函数接受两个参数(两个序列各一个,顺序相同),返回bool值,来自定义一些判断,比如5,加了一个比较是否相等的函数,最后返回的迭代器指向第一个3。
详见:http://www.cplusplus.com/reference/algorithm/find_first_of/

find_end的是从末尾开始查找,也是在一个迭代器范围中查找另外一个迭代器范围,方法也同find_first_of一样有两种,一种是直接匹配,如6;一种是添加自定义比较函数,如7,我添加了一个比小的函数,返回的迭代器指向最后一个2。
详见:http://www.cplusplus.com/reference/algorithm/find_end/

其间区别要细细体会,在不同场景使用,findfind_if,find_if_not都是在一个迭代器范围中查找一个元素,而find_first_of,find_end则是在一个迭代器范围中查找另一个迭代器范围,并且都有添加自定义函数的用法**,不同之处在于一个正序一个逆序查找**。可以粗略的看出,以find -> find_if , find_if_not -> find_first_of ,find_end功能逐步升级。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值