返回
作用:用来在一个指定的区间中查找元素。
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