#include #include #include #include #include #include #include #include using namespace std; int main (int argc, char * argv[]) { // (1a) declare vectors and sets of strings vs. ints // (generic containers with interface polymorphism) vector intvec; vector stringvec; set > integerset; set > stringset; // (1b) push command line arguments into string and int containers // (use istringstream to convert to ints) int j; for (int i = 1; i < argc; ++i) { istringstream iss(argv[i]); iss >> j; intvec.push_back(j); integerset.insert(j); stringvec.push_back(argv[i]); stringset.insert(argv[i]); } // (3) sort into descending order (use a functor) sort(intvec.begin(),intvec.end(),greater()); sort(stringvec.begin(),stringvec.end(),greater()); // (1c) use copy (generic algorithm over generic iterators) // to print out contents of containers and accumulated values copy (intvec.begin(),intvec.end(), ostream_iterator(cout, " ")); cout << endl; copy (stringvec.begin(),stringvec.end(), ostream_iterator(cout, " ")); cout << endl; copy (integerset.begin(), integerset.end(), ostream_iterator(cout, " ")); cout << endl; copy (stringset.begin(),stringset.end(), ostream_iterator(cout, " ")); cout << endl; // (2) accumulate (another generic algorithm, uses what operator?) // the strings and integers, print out resulting values int sum1 = 0; int sum2 = 0; sum1 = accumulate (intvec.begin(),intvec.end(), sum1); sum2 = accumulate (integerset.begin(),integerset.end(), sum2); string s, t; s = accumulate(stringvec.begin(),stringvec.end(),s); t = accumulate(stringset.begin(),stringset.end(),t); cout << "sum1 = " << sum1 << endl; cout << "sum2 = " << sum2 << endl; cout << "s = " << s << endl; cout << "t = " << t << endl; return 0; }