Source of adjacent_difference2a.cpp


  1: //adjacent_difference2a.cpp

  3: #include <iostream>
  4: #include <vector>
  5: #include <numeric>
  6: using namespace std;

  8: /**
  9: Evaluates the expression 2a+b.
 10: Pre:\n a and b contain integer values.
 11: Post:\n Returns the value 2a+b.
 12: */
 13: int f
 14: (
 15:     int a, //in
 16:     int b  //in
 17: )
 18: {
 19:     return 2*a + b;
 20: }

 22: int main()
 23: {
 24:     cout << "\nThis program illustrates the use of the STL "
 25:         "adjacent_difference() algorithm\n(extended version) from "
 26:         "<numeric> to find the value of the programmer-defined"
 27:         "\nfunction f(a,b)=2*a+b applied to successive pairs of "
 28:         "integers in one vector,\nand write these values to a second "
 29:         "vector.";
 30:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 32:     vector<int> v1{2, 4, 6, 8, 10};
 33:     cout << "\nHere are the values in the first vector:\n";
 34:     for (int i : v1) cout << i << " "; //since C++11
 35:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');

 37:     vector<int> v2{1, 3, 5, 7, 9, 11, 13};
 38:     cout << "\nAnd here are the values in the second vector:\n";
 39:     for (int i : v2) cout << i << " "; //since C++11
 40:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');

 42:     cout << "\nNext a call to ajacent_difference computes the "
 43:         "function 2a+b for all integer\npairs in the first vector, "
 44:         "and writes the values to the second vector, starting\n"
 45:         "at the second position of the second vector.";
 46:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');

 48:     //since C++11 ...
 49:     auto p = adjacent_difference(v1.begin(), v1.end(), v2.begin()+1, f);
 50:     cout << "\nHere are the integer values in the second vector "
 51:         "after this has been done:\n";
 52:     for (int i : v2) cout << i << " "; //since C++11
 53:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
 54:     cout << "\nAnd here is the value pointed to by the iterator "
 55:         "returned by the algorithm: ";
 56:     cout << *p;
 57:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
 58: }