// find_if.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <vector> #include <iostream> #include <algorithm> #include <functional> #include <string> #include <set> #include <list> using namespace std; class OurFriends { public: bool operator()( const string& str) { bool ret = friendset.count(str); return ret; } static void FriendSet(const string *fs,int count) { copy(fs, fs + count, inserter(friendset,friendset.end())); } private: static set< string, less<string>, allocator<string> > friendset; }; set< string, less<string>,allocator<string> > OurFriends::friendset; int main(int argc, char* argv[]) { string Pooh_friend[] = {"Plglet","Trigger", "Eyeore"}; string more_friend[] = {"Quasimodo", "Chip", "Plglet"}; list<string> slist(more_friend, more_friend + 3); OurFriends::FriendSet(Pooh_friend, 3); list<string>::iterator iter; iter = find_if(slist.begin(), slist.end(), OurFriends()); if (iter != slist.end()) { cout << *iter; } return 0; } /* template<class _II, class _Pr> inline _II find_if(_II _F, _II _L, _Pr _P) { for (; _F != _L; ++_F) if (_P(*_F)) break; return (_F); } */ 还有find()的方法 // find.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <algorithm> #include <list> #include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { int array[17] = {7,3,3,7,6,5,8,7,2,1,3,8,7,3,8,4,3}; int elem = array[9]; int* found_it; found_it = find(array, array + sizeof(array)/sizeof(array[0]), elem); cout << "find the first occurence of:" << elem << "/t" << (found_it ? "found!/n" : "not found!/n"); string days[] = { "Monday", "Tuesday", "Wensday", "Thursday", "Friday", "Saturday","Sunday", "Tuesday" }; string oneday(days[1]); list<string> slist(days, days + 6); list<string>::iterator iter; iter = find(slist.begin(), slist.end(), oneday); cout << "find the first occurence of:" << oneday << "/t" << (iter != slist.end() ? "found!/n" : "not found!/n") << "next elem is: " << *++iter; return 0; } /* template<class _II, class _Ty> inline _II find(_II _F, _II _L, const _Ty& _V) { for (; _F != _L; ++_F) if (*_F == _V) break; return (_F); } */