1: //list17.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 reverse() and sort()"
41: "\nmember functions for list objects.";
42: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
44: int a[] = {17, 12, 14, 19, 23, 15, 61, 20, 81, 11};
45: list<int> lst(a, a+10);
46: cout << "\nFor the starting list we have:";
47: cout << "\nSize = " << lst.size();
48: cout << "\nContents: ";
49: list<int>::iterator p = lst.begin();
50: while (p!= lst.end()) cout << *p++ << " ";
51: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
53: cout << "\nNow we sort the list in ascending order:";
54: lst.sort();
55: p = lst.begin();
56: cout << "\nSize = " << lst.size();
57: cout << "\nContents: ";
58: while (p!= lst.end()) cout << *p++ << " ";
59: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
61: cout << "\nNext we reverse the list, which will give the values "
62: "in descending order:";
63: lst.reverse();
64: p = lst.begin();
65: cout << "\nSize = " << lst.size();
66: cout << "\nContents: ";
67: while (p!= lst.end()) cout << *p++ << " ";
68: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
70: cout << "\nFinally we sort the list according to the criterion "
71: "that one value\ncomes before another if and only if it has "
72: "a smaller digit sum:";
73: lst.sort(hasSmallerDigitSum);
74: p = lst.begin();
75: cout << "\nSize = " << lst.size();
76: cout << "\nContents: ";
77: while (p!= lst.end()) cout << *p++ << " ";
78: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
79: }