STL 之find,find_if,find_end,find_first_of

38 篇文章 0 订阅

返回


作用:用来在一个指定的区间中查找元素。


1,find, find_if

原型:

#include <algorithm>
template <class inputItr,class size,class Type>
inputItr find(inputItr first, inputItr last, const Type& searchValue);

template <class inputItr, class unaryPredicate>
inputItr find_if(inputItr first, inputItr last, UnaryPredicate op);

示例代码:

#include <iostream>
#include <list>

#include <string>
#include <numeric>
#include <iterator>
#include <vector>
#include <functional>

#include <algorithm>

using namespace std;

int main() {
	char cList[10] = {'a','i','C','d','e','f','o','H','u','j'};
	vector<char> charList(cList,cList+10);

	ostream_iterator<char> screen(cout, " ");
	cout << "charList:" << endl;
	copy(charList.begin(),charList.end(),screen);
	cout << endl;

	// 定义迭代器
	vector<char>::iterator position;
	position = find(charList.begin(),charList.end(),'d');

	if ( position != charList.end()) 
	{
		cout << "position = " << (position - charList.begin()) << endl; 
	} else {
		cout << "the element is not in the list" << endl;
	}

	position = find_if(charList.begin(),charList.end(),isupper);
	if ( position != charList.end()) 
	{
		cout << "position = " << (position - charList.begin()) << endl; 
	} else {
		cout << "the element is not in the list" << endl;
	}

	return 0;
}

运行结果:

charList:
a i C d e f o H u j
position = 3
position = 2


2,find_end,find_first_of

声明:

#include <algorithm>
template <class forwardItr1,class forwardItr2>
forwardItr1 find_end(forwardItr1 first1, forwardItr1 last1,forwardItr2 first2,forwardItr2 last2);
template <class forwardItr1,class forwardItr2,class binaryPredicate>
forwardItr1 find_end(forwardItr1 first1, forwardItr1 last1,forwardItr2 first2,forwardItr2 last2,binaryPredicate op);

template <class forwardItr1,class forwardItr2>
forwardItr1 find_first_of(forwardItr1 first1, forwardItr1 last1,forwardItr2 first2,forwardItr2 last2);
template <class forwardItr1,class forwardItr2,class binaryPredicate>
forwardItr1 find_first_of(forwardItr1 first1, forwardItr1 last1,forwardItr2 first2,forwardItr2 last2,binaryPredicate op);

示例代码:

#include <iostream>
#include <list>

#include <string>
#include <numeric>
#include <iterator>
#include <vector>
#include <functional>

#include <algorithm>

using namespace std;

int main() {
	int list1[10] = {12,34,56,21,34,78,34,56,12,25};
	int list2[2] = {34,56};
	int list3[3] = {56,21,35};
	int list4[5] = {33,48,21,34,73};

	vector<int> vecList1(list1,list1+10); 
	vector<int> vecList2(list2,list2+2); 
	vector<int> vecList3(list3,list3+3); 
	vector<int> vecList4(list4,list4+5); 

	vector<int>::iterator localtion;
	ostream_iterator<int> screen(cout, " ");

	cout << "List1" << endl;
	copy(list1,list1+10,screen);
	cout << endl;

	cout << "List2" << endl;
	copy(list2,list2+2,screen);
	cout << endl;

	// find_end 查找最后一个匹配
	// 在vecList1 中查找vecList2
	localtion = find_end(vecList1.begin(),vecList1.end(),vecList2.begin(),vecList2.end());
	if (localtion != vecList1.end())
	{
		cout << "position = " << (localtion - vecList1.begin()) << endl;
	} else {
		cout << "vecList2 is not in list1" << endl;
	}

	cout << "List3:" << endl;
	copy(vecList3.begin(),vecList3.end(),screen);
	cout << endl;
	localtion = find_end(vecList1.begin(),vecList1.end(),vecList3.begin(),vecList3.end());
	if (localtion != vecList1.end())
	{
		cout << "position = " << (localtion - vecList1.begin()) << endl;
	} else {
		cout << "vecList3 is not in list1" << endl;
	}

	cout << "List4:" << endl;
	copy(vecList4.begin(),vecList4.end(),screen);
	cout << endl;
	// find_first_of 首次出现的位置
	// 可以检查两个容器中元素是否相互包含
	localtion = find_first_of(vecList1.begin(),vecList1.end(),vecList4.begin(),vecList4.end());
	if (localtion != vecList1.end())
	{
		cout << "position = " << (localtion - vecList1.begin()) << endl;
	} else {
		cout << "No element of List4 is in list1" << endl;
	}
	return 0;
}

运行结果:

List1
12 34 56 21 34 78 34 56 12 25
List2
34 56
position = 6
List3:
56 21 35
vecList3 is not in list1
List4:
33 48 21 34 73
position = 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yours风之恋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值