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 iterator
s 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(), ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.