7.2. Removing Objects from a Container
Problem
You want to remove objects from a container.
Solution
Use the container’s erase
member function to erase a single element or a range of elements, and
possibly use one of the standard algorithms to make the job easier. Example 7-2 shows a couple of different ways
to remove elements from a sequence.
Example 7-2. Removing elements from a container
#include <iostream>
#include <string>
#include <list>
#include <algorithm>
#include <functional>
#include "utils.h" // For printContainer(): see 7.10
using namespace std;
int main() {
list<string> lstStr;
lstStr.push_back("On");
lstStr.push_back("a");
lstStr.push_back("cloudy");
lstStr.push_back("cloudy");
lstStr.push_back("day");
list<string>::iterator p;
// Find what you want with find
p = find(lstStr.begin(), lstStr.end(), "day");
p = lstStr.erase(p); // Now p points to the last element
// Or, to erase all occurrences of something, use remove
lstStr.erase(remove(lstStr.begin(), lstStr.end(), "cloudy"),
lstStr.end());
printContainer(lstStr); // See 7.10
}Discussion
Use a container’s erase member function to remove
one or more elements from it. All containers have two overloads of erase: one that takes a single iterator argument that points to the element you want to delete, and another
that takes two iterators that represent a range of
elements you want deleted. To erase a single element, obtain an iterator referring to that element and pass the iterator to erase, as in Example 7-2:
p = find(lstStr.begin(), ...