/* FileName: main.cpp Title: funciton object & funciton pointer Author: caigen (at) HuaQiao University Time: 2011/3/30 */ #include <iostream> using std::cin; using std::cout; using std::endl; #include <cstdlib> // uses qsort #include <algorithm> using std::sort; #include <functional> using std::less; class FunctionObject { public: // the public key word is necessary. bool operator()(const int first, const int second) { return first < second; } }; int compare(const void* first, const void* second) { int* arg1 = (int*)first; int* arg2 = (int*)second; if(*arg1 < *arg2) return -1; else if(*arg1 == *arg2) return 0; else return 1; } // strict weak ordering. // return boolean. bool cmp(const int first, const int second) { return first < second; } int main(int argc, char* argv[]) { unsigned int n; cin>> n; int* data = new int[n]; for(int i = 0; i < n; i++) { cin >> data[i]; } // Error: qsort不接受函数对象 // qsort(data, n, sizeof(int), less<int>()); // OK: qsort接受函数指针 qsort(data, n, sizeof(int), compare); // OK: STL函数对象 & 自定义函数对象 sort(data, data + n, less<int>()); sort(data, data + n, FunctionObject()); // OK: sort接受函数指针 sort(data, data + n, cmp); for(int j = 0; j < n; j++) { cout << data[j] << " "; } cout << endl; return 0; }