1: //unique2a.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() " 26: "algorithm\n(extended version) to remove adjacent duplicate " 27: "copies of integer\nvalues divisible by 3 from a vector of " 28: "integers."; 29: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 31: int a1[] = {1, 2, 2, 3, 3, 6, 5, 2, 6, 9, 12, 2, 2, 2, 9, 10, 11, 12}; 32: vector<int> v1(a1, a1+18); 33: cout << "\nHere are the values in the first vector:\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: cout << "\nNow we remove all adjacent duplicate copies of the " 39: "\nvalues 2 and 3 and redisplay the values to confirm:\n"; 40: vector<int>::iterator new_end = 41: unique(v1.begin(), v1.end(), bothDivisibleByThree); 42: vector<int>::iterator p = v1.begin(); 43: while (p != new_end) cout << *p++ << " "; 44: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 46: int a2[] = {1, 1, 2, 3, 3, 3, 4, 5, 5, 6, 6, 7, 8, 9, 9, 9, 9, 10}; 47: vector<int> v2(a2, a2+18); 48: cout << "\nHere are the values in the second vector:\n"; 49: for (vector<int>::size_type i=0; i<v2.size(); i++) 50: cout << v2.at(i) << " ";; 51: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 53: cout << "\nNow we remove all adjacent duplicate copies of any " 54: "\nof the values and redisplay the values to confirm:\n"; 55: new_end = unique(v2.begin(), v2.end(), bothDivisibleByThree); 56: p = v2.begin(); 57: while (p != new_end) cout << *p++ << " "; 58: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n'); 59: }