// Demonstrating multiset erase functions. // This is the modification of Example 7-3 discussed on p. 160. #include #include #include list lst(char* s) // Return list containing the characters of s // (not including the terminating null). { list x; while (*s != '\0') x.push_back(*s++); return x; } template list lst1(const Container& m) // Return list containing the characters in m { list x; copy(m.begin(), m.end(), back_inserter(x)); return x; } int main() { cout << "Demonstrating multiset erase functions" << endl; list list1 = lst("There is no distinctly native " "American criminal class"); // Put the characters in list1 into multiset1: multiset > multiset1; copy(list1.begin(), list1.end(), inserter(multiset1, multiset1.end())); assert(lst1(multiset1) == lst(" ATaaaaccccdeeeehiiiiiiilll" "mmnnnnnorrrsssstttvy")); multiset1.erase('a'); assert(lst1(multiset1) == lst(" ATccccdeeeehiiiiiiilll" "mmnnnnnorrrsssstttvy")); multiset >::iterator i = multiset1.find('e'); multiset1.erase(i); assert(lst1(multiset1) == lst(" ATccccdeeehiiiiiiilll" "mmnnnnnorrrsssstttvy")); i = multiset1.find('T'); multiset >::iterator j = multiset1.find('v'); multiset1.erase(i, j); assert(lst1(multiset1) == lst(" Avy")); }