首页 > 其他 > 详细

STL 之find,find_if,find_end,find_first_of

时间:2014-04-16 16:14:13      阅读:468      评论:0      收藏: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

STL 之find,find_if,find_end,find_first_of,布布扣,bubuko.com

STL 之find,find_if,find_end,find_first_of

原文:http://blog.csdn.net/haifengzhilian/article/details/23738675

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!