STL 之find,find_if,find_end,find_first_of

来源:互联网 发布:java随机数生成1到6 编辑:程序博客网 时间:2024/05/17 13:13

返回


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


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 中查找vecList2localtion = 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

2 0
原创粉丝点击