阅读下面的程序,对照运行结果,领会STL的用法 (1)
#include <string> #include <set> #include <iterator> #include <iostream> using namespace std; int main() { set <string> strset; strset.insert("cantaloupes"); strset.insert("grapes"); strset.insert("apple"); strset.insert("orange"); strset.insert("banana"); strset.insert("grapes"); copy(strset.begin(), strset.end(), ostream_iterator<string>(cout, " ")); cout << endl; return 0; }(2)
#include <functional> #include <numeric> #include <vector> #include <iostream> using namespace std; int main() { vector<int> v(5); for (int i = 0; i < 5; i++) v[i] = i + 1; int sum = accumulate(v.begin(), v.end(), 0); cout << "Sum of values == " << sum << endl; int product = accumulate(v.begin(), v.end(), 1, multiplies<long>()); cout << "Product of values == " << product << endl; return 0; }(3)
#include <algorithm> #include <functional> #include <vector> #include <iostream> #include <numeric> #include <iterator> using namespace std; int main() { int a[] = {1,4,7,2,5,8}; int b[] = {1,2,3,3,2,1}; const int ASZ = sizeof a / sizeof a[0]; const int BSZ = sizeof b / sizeof b[0]; ostream_iterator<int> out(cout," "); copy(a, a + ASZ, out); cout<<endl; copy(b, b + BSZ, out); cout<<endl; int r = accumulate(a, a + ASZ, 0); cout << "accumulate 1: " << r << endl; // Should produce the same result: r = accumulate(b, b + BSZ, 0, plus<int>()); cout << "accumulate 2: " << r << endl; r = inner_product(a, a + ASZ, b, 0); // 或 r = inner_product(a, a + ASZ, b, 0, plus<int>(), multiplies<int>()); cout << "inner_product : " << r << endl; int* it = partial_sum(a, a + ASZ, b); // 或 int* it = partial_sum(a, a + ASZ, b, plus<int>()); copy(b, it, out); cout<<endl; it = adjacent_difference(a, a + ASZ, b); // 或 it = adjacent_difference(a, a + ASZ, b, minus<int>()); copy(b, it, out); cout<<endl; return 0; }(4)
#include <algorithm> #include <functional> #include <iostream> #include <vector> #include <iterator> using namespace std; class myAdd: public binary_function<int,int,int> { public: int operator()(int a, int b) const { return a+b; } }; int main() { int a[5]= {1,2,3,4,5}; vector<int> my(5); transform(a,a+5,my.begin(), bind2nd(myAdd(), 4)); copy(my.begin(), my.end(), ostream_iterator<int>(cout, " ")); cout<<endl; transform(a,a+5,a,my.begin(), myAdd()); copy(my.begin(), my.end(), ostream_iterator<int>(cout, " ")); cout<<endl; return 0; }(5)
#include <iterator> #include <algorithm> #include <functional> #include <iostream> #include <vector> using namespace std; class Angle { int degrees; public: Angle(int deg) : degrees(deg) {} int mul(int times) { return degrees *= times; } }; int main() { int x[] = {1, 2, 4, 5, 8}; vector<Angle> va; for(int i =10; i <= 50; i += 10) va.push_back(Angle(i)); transform(va.begin(), va.end(), x, ostream_iterator<int>(cout , " "), mem_fun_ref(&Angle::mul)); cout << endl; return 0; }(6)
#include <string> #include <iostream> #include <map> using namespace std; class CStudent { public : int nStudentID; int nAge; public : CStudent() { } CStudent(int nSID, int nA) { nStudentID=nSID; nAge=nA; } //复制构造函数 CStudent(const CStudent& ob) { nStudentID=ob.nStudentID; nAge=ob.nAge; } }; int main() { map <string, CStudent> mapStudent; mapStudent["zhangsan"] = CStudent(100012, 22); mapStudent["Lisi"] = CStudent(100085, 21); mapStudent["Wangwu"] = CStudent(100093, 23); cout << "The Student number for Lisi is " <<(mapStudent["Lisi"].nStudentID) << endl; return 0; }
