// comments #include #include #include #include std::ostream& operator<<(std::ostream& out, std::vector& v) { using namespace std; // looping on vector iterators: don't EVER use "vi < v.end()", always "vi != v.end()" for(vector::iterator vi = v.begin(); vi != v.end(); vi++) { out << *vi << " "; } out << endl; return out; } int checkSum(std::string s) { using namespace std; int ret = 0; for(string::iterator si = s.begin(); si != s.end(); si++) { ret += (int) *si; } cout << "checkSum(" << s << ") = " << ret << endl; return ret; } // user-defined comparator: ALWAYS MAKE SURE IT DEFINES A STRICT ORDER!!!! bool myComparator(std::string s, std::string t) { int ssize = s.size(); int tsize = t.size(); int n = ssize < tsize ? ssize : tsize; int i = 0; while(i < n && s[i] == t[i]) { i++; } if (i < n) { if (s[i] > t[i]) { return true; } else { return false; } } else { return ssize > tsize; } } int main(int argc, char** argv) { using namespace std; int ret = 0; vector cmdLineArgs; for(int i = 1; i < argc; i++) { cmdLineArgs.push_back(argv[i]); } cout << cmdLineArgs; for_each(cmdLineArgs.begin(), cmdLineArgs.end(), checkSum); vector cla2(cmdLineArgs); for(vector::iterator vi = cla2.begin(); vi != cla2.end(); vi++) { for(string::iterator si = vi->begin(); si != vi->end(); si++) { (*si)++; } } cout << cla2; // sorting with a hand-made comparator sort(cmdLineArgs.begin(), cmdLineArgs.end(), myComparator); cout << cmdLineArgs; // swap two iterators iter_swap(cmdLineArgs.begin(), cmdLineArgs.begin()+1); cout << cmdLineArgs; // find maximum element vector::iterator theMaxEl = max_element(cmdLineArgs.begin(), cmdLineArgs.end()); cout << "maximum element = " << *theMaxEl << endl; // merge two sorted vectors sort(cmdLineArgs.begin(), cmdLineArgs.end()); sort(cla2.begin(), cla2.end()); vector result(cmdLineArgs.size() + cla2.size()); merge(cmdLineArgs.begin(), cmdLineArgs.end(), cla2.begin(), cla2.end(), result.begin()); cout << result; /* // wrong way to erase elements from a vector (risk segmentation fault) int k = 1; for(vector::iterator vi = result.begin(); vi != result.end(); vi++) { if (k % 2 == 1) { result.erase(vi); } } cout << result; */ // right way to erase elements from a vector int k = 1; vector::iterator myIt = result.begin(); while(myIt != result.end()) { if (k % 2 == 1) { myIt = result.erase(myIt); } else { myIt++; } k++; } cout << result; return ret; }