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(), ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access