1: //transform1a.cpp
3: #include <iostream>
4: #include <vector>
5: #include <deque>
6: #include <algorithm>
7: #include <cmath>
8: using namespace std;
10: /**
11: Finds the cube of its input.
12: Pre:\n n contains an integer value.
13: Post:\n The cube of n has been returned.
14: */
15: int cube
16: (
17: int n //in
18: )
19: {
20: return n * n * n;
21: }
24: int main()
25: {
26: cout << "\nThis program illustrates the use of the STL transform "
27: "algorithm (default\nversion) to find the square root of each "
28: "value in a range of integers,\nas well as the cube of each "
29: "value in a range of integers."
30:
31: "\n\nThe square roots are found with a built-in library function "
32: "and placed in\na different container from the original values. "
33: "The cubes are found with a\nprogrammer-defined function and they "
34: "overwrite the original values.";
35: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
37: int a1[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
38: vector<int> v(a1, a1+10);
39: cout << "\nHere are the values in a vector:\n";
40: for (vector<int>::size_type i=0; i<v.size(); i++)
41: cout << v.at(i) << " ";;
42: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
44: double a2[] = {-1.0, -2.0, -3.0, -4.0, -5.0,
45: -6.0, -7.0, -8.0, -9.0, -10.0};
46: deque<double> d(a2, a2+10);
47: cout << "\nHere are the values in a deque:\n";
48: for (deque<double>::size_type i=0; i<d.size(); i++)
49: cout << d.at(i) << " ";;
50: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
52: deque<double>::iterator p_deque;
53: p_deque = transform(v.begin()+1, v.end()-1, d.begin()+1, sqrt);
54: cout << "\nHere are the new values in the deque after all but the "
55: "values at the ends\nhave been overwritten by the square roots "
56: "of the corresponding values from\nthe vector:\n";
57: for (deque<double>::size_type i=0; i<d.size(); i++)
58: cout << d.at(i) << " ";;
59: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
61: cout << "\nAnd the iterator returned by the algorithm is pointing "
62: "at the deque value " << *p_deque << ".";
63: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
65: vector<int>::iterator p_vector = v.end();
66: p_vector = transform(v.begin(), v.end(), v.begin(), cube);
67: cout << "\nHere are the cubes of the original values, read now "
68: "from the original vector:\n";
69: for (vector<int>::size_type i=0; i<v.size(); i++)
70: cout << v.at(i) << " ";;
71: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
73: if (p_vector == v.end())
74: cout << "\nThis time the iterator returned by the algorithm "
75: "is pointing to the end of\nthe original vector.";
76: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
77: }