#include #include #include #include #include "predicates.h" using namespace std; //CONTAINS class Contains { string d_target; size_t d_count; public: Contains(char const *target) : d_target(target), d_count(0) {} bool operator()(string const &str) { d_count++; return str.find_first_of(d_target) != string::npos; } bool operator()(string const &s1, string const &s2) { d_count++; return s1.find_first_of(s2) != string::npos; } size_t count() const { return d_count; } }; //= //MAIN int main(int argc, char **argv) { Contains contains{ "aeiou" }; if (argc == 1) cout << "Counted " << count_if(istream_iterator{ cin }, istream_iterator{}, PredicateObject1{contains} ) << " words containing vowels "; else cout << "Counted " << count_if(istream_iterator{ cin }, istream_iterator{}, [&](string const &target) { return PredicateObject2 { contains }(target, "aeiou"); } ) << " words containing vowels "; cout << "(read " << contains.count() << " strings)\n"; } /* Generated output after executing (predobj.cc being this soure file) a.out < predobj.cc or a.out 2 < predobj.cc Counted 107 words containing vowels (read 163 strings) */ //=