Source of list18.cpp


  1: //list18.cpp

  3: #include <iostream>
  4: #include <list>
  5: using namespace std;

  7: bool hasSmallerDigitSum
  8: (
  9:     int i1, //in
 10:     int i2  //in
 11: )
 12: /**<
 13: Test if one integer has a smaller digit sum than another.
 14: @return true if sum of the digits in i1 is < sum of digits
 15: in i2, and otherwise returns false.
 16: @param i1 An integer.
 17: @param i2 An integer.
 18: @pre i1 and i2 have been initialized and i1, i2 are both > 0.
 19: @post No side effects. 
 20: */
 21: {
 22:     int digitSum1 = 0;
 23:     while (i1 != 0)
 24:     {
 25:         digitSum1 += i1 % 10;
 26:         i1 /= 10;
 27:     }

 29:     int digitSum2 = 0;
 30:     while (i2 != 0)
 31:     {
 32:         digitSum2 += i2 % 10;
 33:         i2 /= 10;
 34:     }
 35:     return digitSum1 < digitSum2;
 36: }

 38: int main()
 39: {
 40:     cout << "\nThis program illustrates the merge() member function "
 41:         "for list objects.";
 42:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 44:     int a1[] = {1, 3, 5, 7, 9, 11, 13};
 45:     list<int> lst1(a1, a1+7);
 46:     int a2[] = {2, 4, 6, 8, 10, 16, 20, 22};
 47:     list<int> lst2(a2, a2+8);

 49:     cout << "\nFor the first list we have:";
 50:     cout << "\nSize = " << lst1.size();
 51:     cout << "\nContents: ";
 52:     list<int>::iterator p = lst1.begin();
 53:     while (p!= lst1.end())  cout << *p++ << " ";
 54:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 56:     cout << "\nFor the second list we have:";
 57:     cout << "\nSize = " << lst2.size();
 58:     cout << "\nContents: ";
 59:     p = lst2.begin();
 60:     while (p!= lst2.end())  cout << *p++ << " ";
 61:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 63:     cout << "\nNow we merge the second list with the first list.";
 64:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
 65:     lst1.merge(lst2);

 67:     cout << "\nAfter the merge, for the first list we have:";
 68:     cout << "\nSize = " << lst1.size();
 69:     cout << "\nContents: ";
 70:     p = lst1.begin();
 71:     while (p!= lst1.end())  cout << *p++ << " ";
 72:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 74:     cout << "\nAnd for the second list we now have:";
 75:     cout << "\nSize = " << lst2.size();
 76:     cout << "\nContents: ";
 77:     p = lst2.begin();
 78:     while (p!= lst2.end())  cout << *p++ << " ";
 79:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 81:     cout << "\nNext we illustrate a merge in which the ordering of "
 82:         "the integer values is\ndetermined by the criterion that one "
 83:         "integer precedes another if and only\nif it has a smaller "
 84:         "digit sum.";
 85:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 87:     int a3[] = {20, 12, 15, 61, 17, 19};
 88:     list<int> lst3(a3, a3+6);
 89:     int a4[] = {11, 23, 14, 81};
 90:     list<int> lst4(a4, a4+4);

 92:     cout << "\nFor the first list we have:";
 93:     cout << "\nSize = " << lst3.size();
 94:     cout << "\nContents: ";
 95:     p = lst3.begin();
 96:     while (p!= lst3.end())  cout << *p++ << " ";
 97:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 99:     cout << "\nFor the second list we have:";
100:     cout << "\nSize = " << lst4.size();
101:     cout << "\nContents: ";
102:     p = lst4.begin();
103:     while (p!= lst4.end())  cout << *p++ << " ";
104:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

106:     cout << "\nNow we merge the second list with the first list.";
107:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
108:     lst3.merge(lst4, hasSmallerDigitSum);

110:     cout << "\nAfter the merge, for the first list we have:";
111:     cout << "\nSize = " << lst3.size();
112:     cout << "\nContents: ";
113:     p = lst3.begin();
114:     while (p!= lst3.end())  cout << *p++ << " ";
115:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

117:     cout << "\nAnd for the second list we now have:";
118:     cout << "\nSize = " << lst4.size();
119:     cout << "\nContents: ";
120:     p = lst4.begin();
121:     while (p!= lst4.end())  cout << *p++ << " ";
122:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');
123: }