1: //unique_copy2a.cpp 3: #include <iostream> 4: #include <vector> 5: #include <algorithm> 6: using namespace std; 8: /** 9: Determines if two integers are both divisible by 3. 10: Pre:\n m and n both contain an integer. 11: Post:\n Returns true if m and n are both divisible by 3, 12: and otherwise false. 13: */ 14: bool bothDivisibleByThree 15: ( 16: int m, //in 17: int n //in 18: ) 19: { 20: return (m%3 == 0) && (n%3 == 0); 21: } 23: int main() 24: { 25: cout << "\nThis program illustrates the use of the STL unique_copy() " 26: "algorithm\n(extended version) to remove adjacent duplicate copies " 27: "of integer values\ndivisible by 3 from a vector of integers, and " 28: "simultaneously copy the\nremaining values to another vector."; 29: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 31: int a11[] = {1, 2, 2, 3, 3, 6, 5, 2, 6, 9, 12, 2, 2, 2, 9, 10, 11, 12}; 32: vector<int> v11(a11, a11+18); 33: cout << "\nHere are the values in the source vector:\n"; 34: for (vector<int>::size_type i=0; i<v11.size(); i++) 35: cout << v11.at(i) << " ";; 36: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 38: int a12[] = {21, 22, 23, 24, 25, 26, 27, 28, 29, 39: 30, 31, 32, 33, 34, 35, 36, 37, 38}; 40: vector<int> v12(a12, a12+18); 41: cout << "\nHere are the values in the destination vector:\n"; 42: for (vector<int>::size_type i=0; i<v12.size(); i++) 43: cout << v12.at(i) << " ";; 44: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 46: cout << "\nNow we remove all adjacent duplicate copies of any " 47: " values divisible by 3\nfrom the source vector and copy the " 48: "remaining values to the destination\nvector, starting at the " 49: "third value in that destination vector."; 50: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 51: vector<int>::iterator output_end = unique_copy(v11.begin(), v11.end(), 52: v12.begin()+2, bothDivisibleByThree); 54: cout << "\nHere are the (unchanged) source vector values:\n"; 55: vector<int>::iterator p = v11.begin(); 56: while (p != v11.end()) cout << *p++ << " "; 57: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 59: cout << "\nAnd here are the destination vector values:\n"; 60: p = v12.begin(); 61: while (p != v12.end()) cout << *p++ << " "; 62: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 64: cout << "\nThe iterator returned by the call to unique_copy() is " 65: "pointing to the value " << *output_end << "."; 66: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 67: }