============================MODULE31======================================= | | | 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========================== //iterator simple example #include #include using namespace std; int main() { //lst, list container for character elements list lst; //append elements from 'A' to 'Z' //to the list lst container for(char chs='A'; chs<='Z'; ++chs) lst.push_back(chs); //iterate over all elements and print, //separated by space list::const_iterator pos; for(pos = lst.begin(); pos != lst.end(); ++pos) cout<<*pos<<' '; cout< #include using namespace std; int main() { //set container of int //data type set tst; //insert elements tst.insert(12); tst.insert(21); tst.insert(32); tst.insert(31); tst.insert(9); tst.insert(14); tst.insert(21); tst.insert(31); tst.insert(7); //iterate over all elements and print, //separated by space set::const_iterator pos; //preincrement and predecrement are faster //than postincrement and postdecrement... for(pos = tst.begin(); pos != tst.end(); ++pos) cout<<*pos<<' '; cout< #include using namespace std; int main() { //multiset container of int //data type multiset tst; //insert elements tst.insert(12); tst.insert(21); tst.insert(32); tst.insert(31); tst.insert(9); tst.insert(14); tst.insert(21); tst.insert(31); tst.insert(7); //iterate over all elements and print, //separated by space multiset::const_iterator pos; //preincrement and predecrement are faster //than postincrement and postdecrement... for(pos = tst.begin(); pos != tst.end(); ++pos) cout<<*pos<<' '; cout< #include #include using namespace std; int main() { //type of the collection map mp; //set container for int/string values //insert some elements in arbitrary order //notice a value with key 1... mp.insert(make_pair(5,"learn")); mp.insert(make_pair(2,"map")); mp.insert(make_pair(1,"Testing")); mp.insert(make_pair(7,"tagged")); mp.insert(make_pair(4,"strings")); mp.insert(make_pair(6,"iterator!")); mp.insert(make_pair(1,"the")); mp.insert(make_pair(3,"tagged")); //iterate over all elements and print, //element member second is the value map::iterator pos; for(pos = mp.begin(); pos != mp.end(); ++pos) cout<second<<' '; cout< #include #include using namespace std; int main() { //type of the collection multimap mmp; //set container for int/string values //insert some elements in arbitrary order //notice a value of key 1 mmp.insert(make_pair(5,"learn")); mmp.insert(make_pair(2,"map")); mmp.insert(make_pair(1,"Testing")); mmp.insert(make_pair(7,"tagged")); mmp.insert(make_pair(4,"strings")); mmp.insert(make_pair(6,"iterator!")); mmp.insert(make_pair(1,"the")); mmp.insert(make_pair(3,"tagged")); //iterate over all elements and print, //element member second is the value multimap::iterator pos; for(pos = mmp.begin(); pos != mmp.end(); ++pos) cout<second<<' '; cout< #include #include using namespace std; int main() { int i; list lst; for(i = 1; i <= 10; ++i) lst.push_back(i); list::iterator lstIter, lstpos = lst.begin(); cout<<"The lst list data: "; for(lstIter = lst.begin(); lstIter != lst.end(); lstIter++) cout<<*lstIter<<" "; cout< #include #include using namespace std; int main() { int i; vector vec; for(i = 1; i < 5; ++i) vec.push_back(i); vector ::iterator vecIter; cout<<"The vector vec data: "; for(vecIter = vec.begin(); vecIter != vec.end(); vecIter++) cout<<*vecIter<<" "; cout< > backiter(vec); *backiter = 11; backiter++; *backiter = 9; backiter++; *backiter = 27; cout<<"\nOperation: *backiter = 11 then backiter++...\n"; cout<<"New vector vec data: "; for(vecIter = vec.begin(); vecIter != vec.end(); vecIter++) cout<<*vecIter<<" "; cout< #include #include using namespace std; int main() { int i; list lst; for(i = -1; i < 10; ++i) lst.push_back(2*i); list ::iterator lstiter, lstpos = lst.begin(); cout<<"The list lst data: "; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout<::difference_type lstdiff; cout<<"\nOperation: lstdiff = distance(lst.begin(), lstpos)\n"; lstdiff = distance(lst.begin(), lstpos); cout<<"The distance from lst.begin() to lstpos is: "< #include #include using namespace std; int main() { int i; list::iterator lstiter; list lst; for(i = -2; i<=5; ++i) lst.push_back(i); cout<<"The list lst data: "; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< > Iter(lst); *Iter = 21; ++Iter; *Iter = 12; cout<<"New list lst data: "; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< #include #include using namespace std; int main() { int i; list ::iterator lstiter; list lst; for(i = -3; i<=2; ++i) lst.push_back(i); cout<<"The list lst data: "; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< > Iter(lst, lst.begin()); *Iter = 7; ++Iter; *Iter = 12; cout<<"\nOperation: *Iter = 7 then ++Iter...\n"; cout<<"After the insertions, the list lst data: \n"; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< #include #include using namespace std; int main() { int i; vector vec; for(i = 1; i<=10; ++i) vec.push_back(i); vector::iterator veciter; cout<<"The vector vec data: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rvecpos1 = vec.rbegin(), rvecpos2 = vec.rbegin(); cout<<"The iterators rvecpos1 and rvecpos2 points to the first\n" <<"element in the reversed sequence: "<<*rvecpos1< #include #include using namespace std; int main() { int i; vector vec; for(i = 11; i<15; ++i) vec.push_back(i); vector ::iterator veciter; cout<<"The vector vec data: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rvecpos1 = vec.rbegin(), rvecpos2 = vec.rbegin(); cout<<"\nThe iterators rvecpos1 and rvecpos2 points\nto the first" <<"element in the reversed sequence: "<<*rvecpos1< #include #include int main() { using namespace std; int i; vector vec; for(i = 10; i<= 17; ++i) vec.push_back(i); vector::iterator veciter; cout<<"The initial vector vec is: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rvecpos1 = vec.rbegin(), rvecpos2 = vec.rbegin(); cout<<"The iterators rvecpos1 & rvecpos2 initially point\nto the " <<"first element in the reversed sequence: " <<*rvecpos1< rvecpos2\n"; if(rvecpos1 > rvecpos2) cout<<"The iterator rvecpos1 is greater than" <<" the iterator rvecpos2."< rvecpos2\n"; if(rvecpos1 > rvecpos2) cout<<"The iterator rvecpos1 is greater than" <<" the iterator rvecpos2."< #include #include using namespace std; int main() { int i; vector vec; for(i = 10; i<= 15; ++i) vec.push_back(i); vector ::iterator veciter; cout<<"The vector vec data: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rvecpos1 = vec.rbegin()+1, rvecpos2 = vec.rbegin(); cout<<"The iterator rvecpos1 points to the\n" <<"second element in the reversed sequence: " <<*rvecpos1< #include #include using namespace std; int main() { int i; vector vec; for(i = 10; i<= 15; ++i) vec.push_back(i); vector ::iterator veciter; cout<<"The vector vec data: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rvecpos1 = vec.rbegin(), rvecpos2 = vec.rbegin(); cout<<"The iterators rvecpos1 & rvecpos2 point to the\n" <<"second element in the reversed sequence: " <<*rvecpos1< rvecpos1\n"; if(rvecpos2 > rvecpos1) cout<<"The iterator rvecpos2 is greater than\n" <<"the iterator rvecpos1."< rvecpos1\n"; if(rvecpos2 > rvecpos1) cout<<"The iterator rvecpos2 is greater than\n" <<"the iterator rvecpos1."<= #include #include #include using namespace std; int main() { int i; vector vec; for(i = 10; i<= 15; ++i) vec.push_back(i); vector ::iterator veciter; cout<<"The vector vec data: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rvecpos1 = vec.rbegin(), rvecpos2 = vec.rbegin(); cout<<"The iterators rvecpos1 & rvecpos2 point to the\n" <<"second element in the reversed sequence: " <<*rvecpos1<= rvecpos1\n"; if(rvecpos2 >= rvecpos1) cout<<"The iterator rvecpos2 is greater than or\n" <<"equal to the iterator rvecpos1."<= rvecpos1\n"; if(rvecpos2 >= rvecpos1) cout<<"The iterator rvecpos2 is greater than\n" <<"or equal to the iterator rvecpos1."<= rvecpos2\n"; if(rvecpos1 >= rvecpos2) cout<<"The iterator rvecpos1 is greater than\n" <<"or equal to the iterator rvecpos2."< #include #include using namespace std; int main() { int i; vector vec; for(i = 10; i<=15; ++i) vec.push_back(i); vector::iterator veciter; cout<<"The vector vec data: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rveciter1 = vec.rbegin(); cout<<"\nThe iterator rveciter1 initially points to\n" <<"the first element in the reversed sequence: " <<*rveciter1<::difference_type diff = 4; rveciter1 = diff + rveciter1; cout<<"The iterator rveciter1 now points to the fifth\n" <<"element in the reversed sequence: " <<*rveciter1< #include #include using namespace std; int main() { int i; vector vec; for(i = 10; i<=15; ++i) vec.push_back(i); vector::iterator veciter; cout<<"The initial vector vec is: "; for(veciter = vec.begin(); veciter != vec.end(); veciter++) cout<<*veciter<<" "; cout<::reverse_iterator rvecpos1 = vec.rbegin(), rvecpos2 = vec.rbegin(); cout<<"The iterators rvecpos1 & rvecpos2 initially point to\n" <<"the first element in the reversed sequence: "<<*rvecpos1<::difference_type diff = rvecpos2 - rvecpos1; cout<<"The iterators difference: rvecpos2 - rvecpos1= "< #include #include #include using namespace std; int main() { vector vec1; vector vec2; list lst; iterator_traits::iterator>::iterator_category cati; iterator_traits::iterator>::iterator_category catc; iterator_traits::iterator>::iterator_category catlst; //both are random-access iterators cout<<"The type of iterator for vector is\n" <<"identified by the tag:\n" <<" "< is \n" <<"identified by the tag:\n" <<" "< is\n" <<"identified by the tag:\n" < #include #include #include using namespace std; template //create a function of template class type... void funct(ite i1, ite i2) { iterator_traits::iterator_category cat; cout<<"Test the iterator type...\n"; cout<::value_type p; p = *i1; cout< vec(9, 'T'); list lst(8, 7); //function call... funct(vec.begin(), vec.end()); funct(lst.begin(), lst.end()); return 0; } ---------------------------------------------------------------------------------- //insert_iterator, container_type #include #include #include using namespace std; int main() { list lst1; insert_iterator >::container_type lst2 = lst1; inserter(lst2, lst2.end()) = 12; inserter(lst2, lst2.end()) = 17; inserter(lst2, lst2.begin()) = 24; inserter(lst2, lst2.begin()) = 9; list::iterator veciter; cout<<"The list lst2 data: "; for(veciter = lst2.begin(); veciter != lst2.end(); veciter++) cout<<*veciter<<" "; cout< #include #include using namespace std; int main() { list lst; insert_iterator > iivIter(lst, lst.begin()); *iivIter = 12; *iivIter = 21; *iivIter = 9; *iivIter = 31; list::iterator lstIter; cout<<"The list lst data: "; for(lstIter = lst.begin(); lstIter != lst.end(); lstIter++) cout<<*lstIter<<" "; cout< >::reference refirst = *(lst.begin()); cout<<"The first element in the list lst is: "< #include #include int main() { using namespace std; int i; list ::iterator lstiter; list lst; for(i = 10; i<15; ++i) lst.push_back(i); cout<<"The list lst data: "; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< > Iter(lst, lst.end()); *Iter = 9; *Iter = 33; cout<<"\nAfter the insertions, the list lst data:\n"; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< #include #include using namespace std; int main() { int i; list::iterator lstiter; list lst; for(i = 10; i<=15; ++i) lst.push_back(i); cout<<"The original list lst data: "; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< > Iter(lst, lst.begin()); *Iter = 21; *Iter = 9; *Iter = 34; cout << "After the insertions, the list lst data:\n"; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< #include #include using namespace std; int main() { int i; list lst; for(i = 1; i <= 10; ++i) lst.push_back(i); list::iterator lstIter, lstpos = lst.begin(); cout<<"The lst list data: "; for(lstIter = lst.begin(); lstIter != lst.end(); lstIter++) cout<<*lstIter<<" "; cout< #include #include int main() { using namespace std; int i; list ::iterator lstiter; list lst; for(i = 10; i<15; ++i) lst.push_back(i); cout<<"The list lst data: "; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout< > Iter(lst, lst.end()); *Iter = 9; *Iter = 33; cout<<"\nAfter the insertions, the list lst data:\n"; for(lstiter = lst.begin(); lstiter != lst.end(); lstiter++) cout<<*lstiter<<" "; cout<