============================MODULE37======================================= | | | The program examples' source codes have been arranged in the same | | order that appeared in the Tutorial. This is unedited and unverified | | compilation. Published as is basis for educational, reacretional and | | brain teaser purposes. All trademarks, copyrights and IPs, wherever | | exist, are the sole property of their respective owner and/or | | holder. Any damage or loss by using the materials presented in this | | tutorial is USER responsibility. Part or full distribution, | | reproduction and modification is granted to any body. | | Copyright 2003-2005 © Tenouk, Inc. All rights reserved. | | Distributed through http://www.tenouk.com | | | | | =========================================================================== Originally programs compiled using Borland C++. Examples compiled using g++ are given at the end of every Module. For example if you want to compile C++ codes using VC++/VC++ .Net, change the header file accordingly. Just need some modification for the header files...: ------------------------------------------------- #include //for system() #include ... { C++ codes... } ------------------------------------------------- should be changed to: ------------------------------------------------- #include //use C++ wrapper to call C functions from C++ programs... #include using namespace std; ... { C++ codes... } ------------------------------------------------- In VC++/VC++ .Net the iostream.h (header with .h) is not valid anymore. It should be C++ header, so that it comply to the standard. In older Borland C++ compiler this still works, but not proper any more... and for standard C/C++ the portability should be no problem or better you read Module23 at http://www.tenouk.com/Module23.html to get the big picture...For C codes, they still C codes :o) ========================================================================= ============================HERE, ALL C++ codes========================== //algorithm, set_symmetric_difference() #include #include //For greater() #include #include using namespace std; //Return whether modulus of elem1 is less than modulus of elem2 bool mod_lesser(int elem1, int elem2) { if(elem1 < 0) elem1 = - elem1; if(elem2 < 0) elem2 = - elem2; return (elem1 < elem2); } int main() { vector vec1a, vec1b, vec1(12); vector ::iterator Iter1a, Iter1b, Iter1, Result1; //Constructing vectors vec1a & vec1b with default less-than ordering int i; for(i = -4; i <= 4; i++) vec1a.push_back(i); int j; for(j =-3; j <= 3; j++) vec1b.push_back(j); cout<<"Original vector vec1a with range sorted by the\n" <<"binary predicate less than is: "; for(Iter1a = vec1a.begin(); Iter1a != vec1a.end(); Iter1a++) cout<<*Iter1a<<" "; cout<vec2a(vec1a), vec2b(vec1b), vec2(vec1); vector ::iterator Iter2a, Iter2b, Iter2, Result2; sort(vec2a.begin(), vec2a.end(), greater()); sort(vec2b.begin(), vec2b.end(), greater()); cout<<"\nOriginal vector vec2a with range sorted by the\n" <<"binary predicate greater is: "; for(Iter2a = vec2a.begin(); Iter2a != vec2a.end(); Iter2a++) cout<<*Iter2a<<" "; cout<vec3a(vec1a), vec3b(vec1b), vec3(vec1); vector::iterator Iter3a, Iter3b, Iter3, Result3; sort(vec3a.begin(), vec3a.end(), mod_lesser); sort(vec3b.begin(), vec3b.end(), mod_lesser); cout<<"\nOriginal vector vec3a with range sorted by the\n" <<"binary predicate mod_lesser() is: "; for(Iter3a = vec3a.begin(); Iter3a != vec3a.end(); Iter3a++) cout<<*Iter3a<<" "; cout<() Result1 = set_symmetric_difference(vec1a.begin(), vec1a.end(), vec1b.begin(), vec1b.end(), vec1.begin()); cout<<"\nset_symmetric_difference() of source ranges with default order," <<"\nvector vec1mod: "; for(Iter1 = vec1.begin(); Iter1 != Result1; Iter1++) cout<<*Iter1<<" "; cout<() Result2 = set_symmetric_difference(vec2a.begin(), vec2a.end(), vec2b.begin(), vec2b.end(), vec2.begin(), greater()); cout<<"\nset_symmetric_difference() of source ranges with binary " <<"predicate\ngreater specified, vector vec2mod: "; for(Iter2 = vec2.begin(); Iter2 != Result2; Iter2++) cout<<*Iter2<<" "; cout< #include //For greater() #include #include using namespace std; //Return whether modulus of elem1 is less than modulus of elem2 bool mod_lesser(int elem1, int elem2) { if(elem1 < 0) elem1 = - elem1; if(elem2 < 0) elem2 = - elem2; return (elem1 < elem2); } int main() { vector vec1a, vec1b, vec1(12); vector::iterator Iter1a, Iter1b, Iter1, Result1; //Constructing vectors vec1a & vec1b with default less than ordering int i; for(i = -3; i <= 3; i++) vec1a.push_back(i); int j; for(j =-3; j <= 3; j++) vec1b.push_back(j); cout<<"Original vector vec1a with range sorted by the\n" <<"binary predicate less than is: "; for(Iter1a = vec1a.begin(); Iter1a != vec1a.end(); Iter1a++) cout<<*Iter1a<<" "; cout<vec2a(vec1a), vec2b(vec1b), vec2(vec1); vector ::iterator Iter2a, Iter2b, Iter2, Result2; sort(vec2a.begin(), vec2a.end(), greater()); sort(vec2b.begin(), vec2b.end(), greater()); cout<<"\nOriginal vector vec2a with range sorted by the\n" <<"binary predicate greater is: "; for(Iter2a = vec2a.begin(); Iter2a != vec2a.end(); Iter2a++) cout<<*Iter2a<<" "; cout<vec3a(vec1a), vec3b(vec1b), vec3(vec1); vector ::iterator Iter3a, Iter3b, Iter3, Result3; sort(vec3a.begin(), vec3a.end(), mod_lesser); sort(vec3b.begin(), vec3b.end(), mod_lesser); cout<<"\nOriginal vector vec3a with range sorted by the\n" <<"binary predicate mod_lesser() is: "; for(Iter3a = vec3a.begin(); Iter3a != vec3a.end(); Iter3a++) cout<<*Iter3a<<" "; cout<() Result1 = set_union(vec1a.begin(), vec1a.end(), vec1b.begin(), vec1b.end(), vec1.begin()); cout<<"\nset_union() of source ranges with default order," <<"\nvector vec1mod: "; for(Iter1 = vec1.begin(); Iter1 != Result1; Iter1++) cout<<*Iter1<<" "; cout<() Result2 = set_union(vec2a.begin(), vec2a.end(), vec2b.begin(), vec2b.end(), vec2.begin(), greater()); cout<<"\nset_union() of source ranges with binary predicate greater\n" <<"specified, vector vec2mod: "; for(Iter2 = vec2.begin(); Iter2 != Result2; Iter2++) cout<<*Iter2<<" "; cout< #include //For greater() #include #include using namespace std; //Return whether first element is greater than the second bool userdefgreater(int elem1, int elem2) {return elem1 > elem2;} int main() { vector vec1; //container vector ::iterator Iter1; //iterator int k; for(k = 0; k <= 15; k++) vec1.push_back(k); random_shuffle(vec1.begin(), vec1.end()); cout<<"Original random shuffle vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<()); cout<<"\nRe sorted (greater) vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout< #include #include #include using namespace std; int main() { vector vec1, vec2; vector ::iterator Iter1, Iter2; int i; for(i = 1; i <= 10; i++) vec1.push_back(i); random_shuffle(vec1.begin(), vec1.end()); cout<<"Random shuffle vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<()); cout<<"\nThe greater than heaped version of vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<()); cout<<"\nThe greater than sorted heap vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout< #include #include using namespace std; bool greaterthan(int value ) { return value > 5;} int main() { vector vec1, vec2; vector ::iterator Iter1, Iter2, result; int i; for(i = 0; i <= 10; i++) vec1.push_back(i); int j; for(j = 0; j <= 4; j++) vec1.push_back(3); random_shuffle(vec1.begin(), vec1.end()); cout<<"Random shuffle vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout< #include //For greater() #include #include using namespace std; //Return whether first element is greater than the second bool userdefgreater(int elem1, int elem2) { return elem1 > elem2;} int main() { vector vec1; vector ::iterator Iter1; for (int i=10; i<=20; i++) vec1.push_back(i); random_shuffle(vec1.begin(), vec1.end()); cout<<"Random shuffle vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<()); cout<<"\nRe-sorted (greater) vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout< #include #include using namespace std; bool greaterthan(int value) {return value > 5;} int main() { vector vec1, vec2; vector ::iterator Iter1, Iter2, result; int i; for(i = 10; i<= 20; i++) vec1.push_back(i); int j; for(j = 10; j <= 15; j++) vec2.push_back(j); cout<<"Vector vec1 data is:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout< #include #include #include using namespace std; int main() { vector vec1; deque deq1; vector ::iterator vec1Iter1; deque::iterator deq1Iter; int i; for(i = 10; i <= 15; i++) vec1.push_back(i); int j; for(j =24; j <= 29; j++) deq1.push_back(j); cout<<"Vector vec1 data:\n"; for(vec1Iter1 = vec1.begin(); vec1Iter1 != vec1.end(); vec1Iter1++) cout<<*vec1Iter1<<" "; cout< #include #include #include using namespace std; //The function object multiplies an element by a Factor template class MultValue { private: //The value to multiply by Type Factor; public: //Constructor initializes the value to multiply by MultValue(const Type& _Val) : Factor(_Val) {} //The function call for the element to be multiplied int operator()(Type& elem) const {return (elem * Factor);} }; int main() { vector vec1, vec2(7), vec3(7); vector ::iterator Iter1, Iter2, Iter3; //Constructing vector vec1 for(int i = -4; i <= 2; i++) vec1.push_back(i); cout<<"Original vector vec1 data: "; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<(2)); cout<<"\nThe elements of the vector vec1 multiplied by 2 in place gives:" <<"\nvec1mod data: "; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<(5)); cout<<"\nMultiplying the elements of the vector vec1mod\n" <<"by the factor 5 & copying to vec2 gives:\nvec2 data: "; for(Iter2 = vec2.begin(); Iter2 != vec2.end(); Iter2++) cout<<*Iter2<<" "; cout<()); cout<<"\nMultiplying elements of the vectors vec1mod and vec2 pairwise " <<"gives:\nvec3 data: "; for(Iter3 = vec3.begin(); Iter3 != vec3.end(); Iter3++) cout<<*Iter3<<" "; cout< #include #include #include using namespace std; //Return whether modulus of elem1 is equal to modulus of elem2 bool mod_equal(int elem1, int elem2) { if(elem1 < 0) elem1 = - elem1; if(elem2 < 0) elem2 = - elem2; return (elem1 == elem2); }; int main() { vector vec1; vector ::iterator vec1_Iter1, vec1_Iter2, vec1_Iter3, vec1_NewEnd1, vec1_NewEnd2, vec1_NewEnd3; int i; for(i = 0; i <= 3; i++) { vec1.push_back(4); vec1.push_back(-4); } int j; for(j = 1; j <= 4; j++) vec1.push_back(8); vec1.push_back(9); vec1.push_back(9); cout<<"Vector vec1 data:\n"; for(vec1_Iter1 = vec1.begin(); vec1_Iter1 != vec1.end(); vec1_Iter1++) cout<<*vec1_Iter1<<" "; cout<()); cout<<"\nRemoving adjacent elements satisfying the binary\n" <<"predicate mod_equal() from vector vec1 gives:\n"; for(vec1_Iter3 = vec1.begin(); vec1_Iter3 != vec1_NewEnd3; vec1_Iter3++) cout<<*vec1_Iter3<<" "; cout< #include #include #include using namespace std; //Return whether modulus of elem1 is equal to modulus of elem2 bool mod_equal(int elem1, int elem2) { if(elem1 < 0) elem1 = - elem1; if(elem2 < 0) elem2 = - elem2; return (elem1 == elem2); }; int main() { vector vec1; vector ::iterator vec1_Iter1, vec1_Iter2, vec1_NewEnd1, vec1_NewEnd2; int i; for(i = 0; i <= 1; i++) { vec1.push_back(8); vec1.push_back(-8); } int j; for(j = 0; j <= 2; j++) vec1.push_back(5); vec1.push_back(9); vec1.push_back(9); int k; for(k = 0; k <= 5; k++) vec1.push_back(12); cout<<"Vector vec1 data is:\n"; for(vec1_Iter1 = vec1.begin(); vec1_Iter1 != vec1.end(); vec1_Iter1++) cout<<*vec1_Iter1<<" "; cout< #include //For greater() #include #include using namespace std; //Return whether modulus of elem1 is less than modulus of elem2 bool mod_lesser(int elem1, int elem2) { if(elem1 < 0) elem1 = - elem1; if(elem2 < 0) elem2 = - elem2; return (elem1 < elem2); } int main() { vector vec1; vector ::iterator Iter1, Result1; //Constructing vectors vec1a & vec1b with default less-than ordering for(int i = -2; i <= 4; i++) vec1.push_back(i); for(int j = -3; j <= 0; j++) vec1.push_back(j); sort(vec1.begin(), vec1.end()); cout<<"Original vector vec1 data with range\nsorted by the" <<" binary predicate less than is:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout< vec2(vec1); vector ::iterator Iter2, Result2; sort(vec2.begin(), vec2.end(), greater()); cout<<"\nOriginal vector vec2 data with range\nsorted by the" <<" binary predicate greater is:\n"; for(Iter2 = vec2.begin(); Iter2 != vec2.end(); Iter2++) cout<<*Iter2<<" "; cout<vec3(vec1); vector ::iterator Iter3, Result3; sort(vec3.begin(), vec3.end(), mod_lesser); cout<<"\nOriginal vector vec3 data with range\nsorted by the" <<" binary predicate mod_lesser is:\n"; for(Iter3 = vec3.begin(); Iter3 != vec3.end(); Iter3++) cout<<*Iter3<<" "; cout<() Result1 = upper_bound(vec1.begin(), vec1.end(), -3); cout<<"\nThe upper_bound in vec1 for the element with a value of -3 is: " <<*Result1<() Result2 = upper_bound(vec2.begin(), vec2.end(), 2, greater()); cout<<"\nThe upper_bound in vec2 for the element with a value of 2 is: " <<*Result2< #include //For greater() #include #include using namespace std; //Return whether first element is greater than the second bool userdefgreater(int elem1, int elem2) {return elem1 > elem2;} int main() { vector vec1; //container vector ::iterator Iter1; //iterator int k; for(k = 0; k <= 15; k++) vec1.push_back(k); random_shuffle(vec1.begin(), vec1.end()); cout<<"Original random shuffle vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<()); cout<<"\nRe sorted (greater) vector vec1 data:\n"; for(Iter1 = vec1.begin(); Iter1 != vec1.end(); Iter1++) cout<<*Iter1<<" "; cout<