Source of replace_copy_if1a.cpp


  1: //replace_copy_if1a.cpp

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

  8: /**
  9: Determines if an integer is divisible by 3.
 10: Pre:\n n contains an integer.
 11: Post:\n Returns true if n is divisible by 3, and otherwise false.
 12: */
 13: bool isDivisibleByThree
 14: (
 15:     int n //in
 16: )
 17: {
 18:     return (n%3 == 0);
 19: }

 21: int main()
 22: {
 23:     cout << "\nThis program illustrates the use of the STL "
 24:         "replace_copy_if() algorithm to\ncopy all values from one "
 25:         "vector of integers to another and simultaneously\nreplace, "
 26:         "in the output, all values that satisfy a given predicate "
 27:         "with a\ngiven alternate value.";
 28:     cout << "\nPress Enter to continue ... ";  cin.ignore(80, '\n');

 30:     int a1[] = {1, 2, 2, 3, 4, 5, 2, 3, 6, 7, 8, 9};
 31:     vector<int> v1(a1, a1+12);

 33:     cout << "\nHere are the values in the vector v1:\n";
 34:     for (vector<int>::size_type i=0; i<v1.size(); i++)
 35:         cout << v1.at(i) << " ";
 36:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');

 38:     int a2[] = {101, 102, 103, 104, 105, 106, 107,
 39:                 108, 109, 110, 111, 112, 113, 114};
 40:     vector<int> v2(a2, a2+14);

 42:     cout << "\nHere are the values in the vector v2:\n";
 43:     for (vector<int>::size_type i=0; i<v2.size(); i++)
 44:         cout << v2.at(i) << " ";
 45:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');

 47:     cout << "\nNow we copy all values from v1 to v2, starting at the "
 48:         "3rd value of v2,\nand simultaneously replace each value that's "
 49:         "divisble by 3 with 123.";
 50:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');

 52:     vector<int>::iterator p = replace_copy_if(v1.begin(), v1.end(),
 53:         v2.begin()+2, isDivisibleByThree, 123);

 55:     cout << "\nHere are the revised values in v2:\n";
 56:     for (vector<int>::size_type i=0; i<v2.size(); i++)
 57:         cout << v2.at(i) << " ";
 58:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');

 60:     cout << "\nThe iterator returned by the algorithm is pointing at ";
 61:     if (p == v2.end())
 62:         cout << "\nthe end of the vector v2.";
 63:     else
 64:         cout << "the value " << *p << ".";
 65:     cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
 66: }