1: //list19.cpp
3: #include <iostream>
4: #include <list>
5: using namespace std;
7: int main()
8: {
9: cout << "\nThis program illustrates the splice() member function "
10: "for list objects.";
11: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
13: cout << "\nFirst we illustrate the splicing of an entire second list "
14: "into a first list.";
15: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
17: int a1[] = {1, 1, 1, 1, 1, 1, 1};
18: list<int> lst1(a1, a1+7);
19: int a2[] = {2, 2, 2, 2, 2};
20: list<int> lst2(a2, a2+5);
22: cout << "\nFor the first list we have:";
23: cout << "\nSize = " << lst1.size();
24: cout << "\nContents: ";
25: list<int>::iterator p = lst1.begin();
26: while (p!= lst1.end()) cout << *p++ << " ";
27: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
29: cout << "\nFor the second list we have:";
30: cout << "\nSize = " << lst2.size();
31: cout << "\nContents: ";
32: p = lst2.begin();
33: while (p!= lst2.end()) cout << *p++ << " ";
34: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
36: cout << "\nNow we splice the second list into the first list "
37: "just before the third value.";
38: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
39: list<int>::iterator pSplicePoint = lst1.begin();
40: for (int i=1; i<=2; i++) ++pSplicePoint;
41: lst1.splice(pSplicePoint, lst2);
43: cout << "\nAfter the splice, for the first list we have:";
44: cout << "\nSize = " << lst1.size();
45: cout << "\nContents: ";
46: p = lst1.begin();
47: while (p!= lst1.end()) cout << *p++ << " ";
48: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
50: cout << "\nAnd for the second list we now have:";
51: cout << "\nSize = " << lst2.size();
52: cout << "\nContents: ";
53: p = lst2.begin();
54: while (p!= lst2.end()) cout << *p++ << " ";
55: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
57: cout << "\nNext we illustrate the splicing of a single value from "
58: "a second list\ninto a first list.";
59: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
61: int a3[] = {2, 1, 4, 3, 7, 6, 5};
62: list<int> lst3(a3, a3+7);
63: int a4[] = {25, 22, 29, 23, 21};
64: list<int> lst4(a4, a4+5);
66: cout << "\nFor the first list we have:";
67: cout << "\nSize = " << lst3.size();
68: cout << "\nContents: ";
69: p = lst3.begin();
70: while (p!= lst3.end()) cout << *p++ << " ";
71: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
73: cout << "\nFor the second list we have:";
74: cout << "\nSize = " << lst4.size();
75: cout << "\nContents: ";
76: p = lst4.begin();
77: while (p!= lst4.end()) cout << *p++ << " ";
78: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
80: cout << "\nNow we splice the 4th value from the second list into "
81: "the first list\njust before the 6th value.";
82: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
83: pSplicePoint = lst3.begin();
84: for (int i=1; i<=5; i++) ++pSplicePoint;
85: list<int>::iterator pSpliceValue = lst4.begin();
86: for (int i=1; i<=3; i++) ++pSpliceValue;
87: lst3.splice(pSplicePoint, lst4, pSpliceValue);
89: cout << "\nAfter the splice, for the first list we have:";
90: cout << "\nSize = " << lst3.size();
91: cout << "\nContents: ";
92: p = lst3.begin();
93: while (p!= lst3.end()) cout << *p++ << " ";
94: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
96: cout << "\nAnd for the second list we now have:";
97: cout << "\nSize = " << lst4.size();
98: cout << "\nContents: ";
99: p = lst4.begin();
100: while (p!= lst4.end()) cout << *p++ << " ";
101: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
103: cout << "\nFinallly we illustrate the splicing of a range of values "
104: "from a second list\ninto a first list.";
105: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
107: int a5[] = {1, 2, 3, 4, 5, 6, 7};
108: list<int> lst5(a5, a5+7);
109: int a6[] = {21, 22, 23, 24, 25, 26, 27, 28};
110: list<int> lst6(a6, a6+8);
112: cout << "\nFor the first list we have:";
113: cout << "\nSize = " << lst5.size();
114: cout << "\nContents: ";
115: p = lst5.begin();
116: while (p!= lst5.end()) cout << *p++ << " ";
117: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
119: cout << "\nFor the second list we have:";
120: cout << "\nSize = " << lst6.size();
121: cout << "\nContents: ";
122: p = lst6.begin();
123: while (p!= lst6.end()) cout << *p++ << " ";
124: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
126: cout << "\nNow we splice the 3rd to 7th values from the second list "
127: "into the first list\njust before the 5th value.";
128: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
129: pSplicePoint = lst5.begin();
130: for (int i=1; i<=4; i++) ++pSplicePoint;
131: list<int>::iterator pSpliceBegin = lst6.begin();
132: for (int i=1; i<=2; i++) ++pSpliceBegin;
133: list<int>::iterator pSpliceEnd = lst6.begin();
134: for (int i=1; i<=7; i++) ++pSpliceEnd;
135: lst5.splice(pSplicePoint, lst6, pSpliceBegin, pSpliceEnd);
137: cout << "\nAfter the splice, for the first list we have:";
138: cout << "\nSize = " << lst5.size();
139: cout << "\nContents: ";
140: p = lst5.begin();
141: while (p!= lst5.end()) cout << *p++ << " ";
142: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
144: cout << "\nAnd for the second list we now have:";
145: cout << "\nSize = " << lst6.size();
146: cout << "\nContents: ";
147: p = lst6.begin();
148: while (p!= lst6.end()) cout << *p++ << " ";
149: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
150: }