ArtsAutosBooksBusinessEducationEntertainmentFamilyFashionFoodGamesGenderHealthHolidaysHomeHubPagesPersonal FinancePetsPoliticsReligionSportsTechnologyTravel

C++ - Std::list Remove and Remove_if Examples

Updated on January 4, 2018
sirama profile image

I am a software engineer. I have been working with C++, MFC, and .net technologies for 15 Yrs. I like playing video games & reading books.

1. Introduction to Remove and Remove_if

The Erase function is useful to remove the list elements based on the iterator position. The remove function also used to wipe-out the elements and it removes the elements based on the value. In this hub, we will have close look at how std::list::remove and std::list::remove_if function can be used on the c++ std::list.

2. Supporting function for std::list

2.1 Add default elements to list

The below function Add_ListElements adds default elements to the list. First, it clears the list and then adds six integers (from 1 to 6) to the list. This function takes the list as reference parameter so that the changes reflected back to the caller. Have a look at the Listing 2.1 at the end of this section.

2.2 Iterate the list and print the contents

The function Print_List takes the standard list as parameter as iterates through each elements through an iterator. On each iteration, it prints the content of the list element to console output window. Refer the code listing - Listing 2.2


Listing 2.1 - Populate List with Defaults

//Example 01: Function to Push some values to List
void Add_ListElements(list<int>& listParam)
{
	listParam.clear();
	listParam.push_back(1);
	listParam.push_back(2);
	listParam.push_back(3);
	listParam.push_back(4);
	listParam.push_back(5);
	listParam.push_back(6);
}

Listing 2.2 : Print content of std::list

//Example 02: Function to Print the Values in List
void Print_List(list<int> listParam)
{
	list<int>::iterator listItr;
	printf("\nThe contents of the Lists are:\n");
	for (listItr = listParam.begin();
		listItr != listParam.end();
		listItr++)
		printf("[%d] ", *listItr);
}

3. The Std::list::remove Example

In the main() function of this sample application, a list called “theList” is created. Then, it is added with 6 elements by calling the function Add_ListElements. Once the list is populated, it is passed to the function Print_List to display the content of the list in the console output window.

The list at this moment is shown below:


Std::List Before calling remove function
Std::List Before calling remove function | Source

The remove function of the standard library list, iterates the list and removes the element by matching it with the value passed. For example, the call theList.Remove(2) searches the list and removes all the elements which has the value 2. In our example, we are removing the values 2,4,6 from the list by calling the remove function three times. The below illustration explains this:

The effect of std::list::remove() function on the c++ list
The effect of std::list::remove() function on the c++ list | Source

The complete example and program output is given below:

#include <stdio.h>
#include <conio.h>
#include <list>

using namespace std;

//Example 01: Function to Push some values to List
void Add_ListElements(list<int>& listParam)
{
	listParam.clear();
	listParam.push_back(1);
	listParam.push_back(2);
	listParam.push_back(3);
	listParam.push_back(4);
	listParam.push_back(5);
	listParam.push_back(6);
}

//Example 02: Function to Print the Values in List
void Print_List(list<int> listParam)
{
	list<int>::iterator listItr;
	printf("\nThe contents of the Lists are:\n");
	for (listItr = listParam.begin();
		listItr != listParam.end();
		listItr++)
		printf("[%d] ", *listItr);
}

//Example 01: Clear
void main()
{
	//1.0 Create list and iterator
	list<int> theList;

	//2.0 Let us push some elements to the List
	Add_ListElements(theList);

	//3.0 Print Content of the List
	Print_List(theList);

	//4.0 Remove Values 2,4,6
	theList.remove(2);
	theList.remove(4);
	theList.remove(6);
	Print_List(theList);

	_getch();
}
Std::list::remove example program output
Std::list::remove example program output | Source

4. The remove_if function with predicate functions

The remove_if function takes user defined function as parameter and the user defined function tells under what condition an element can be removed. The user defined function is referred as “Predicate Function” which takes single parameter and that parameter type should match the type of parameter stored by the list. For example, in our case we store integers and predicate function should take integer as parameter and should return a Boolean.

Below are the examples of two predicate functions.

Listing 4.1: List Predicate to remove Even numbers

//Example 03a: Predicate to Remove even numbers
bool even_number(int param)
{
	if (param % 2 == 0)
		return true;
	else
		return false;
}

Listing 4.2: List predicate to remove a number divisible by five

//Example 03b: Predicate to Remove divisible by 5
bool Divby5(int param)
{
	if (param % 5 == 0)
		return true;
	else
		return false;
}

Note that both the example takes integer as parameter. This is because our list is created to store integer values. The fist function in Listing 4.1 check the passed in parameter and returns true when the number is an even number. The same way, the second predicate function (Listing 4.2) returns true when the passed in number is divisible by 5.

Now when we pass these predicate functions to the "std::list::Remove_if()" it iterates through the list and calls the predicate function for each elements in the list. In Addition, it removes the elements whenever the predicate function returns true. Now have a look at the example code below:

//Example 01: Clear List through Remove_if and Predicates
void main()
{
	//1.0 Create list and iterator
	list<int> theList;

	//2.0 Let us push some elements to the List
	Add_ListElements(theList);

	//3.0 Print Content of the List
	Print_List(theList);

	//4.0 Remove even numbers
	printf("\nCalling Remove_if with even_number predicate");
	theList.remove_if(even_number);
	Print_List(theList);

	//5.0 Remove all numbers divisible by 5
	printf("\nCalling Divby5 predicate");
	theList.remove_if(Divby5);
	Print_List(theList);

	_getch();
}

In the example code below, at line 8 we are populating the list by calling the Add_ListElements(). Now list will have the values 1,2,3,4,5,6. At line 15, we are making call to the Remove_If() function and we supply the even_number predicate to it. The standard library function remove_if will iterate through each elements and calls the predicate function in each iteration. When the predicate function returns true, it removes the element in the current iteration and advances to the next element in the list. At line 19, we are calling the remove_if function one more time. This time, we supply the predicate function Divby5. After calling remove_if twice, the list will have 1,3 and this shown in the below picture:

Remove_If function with predicates explained
Remove_If function with predicates explained | Source

The complete code example and its output is given below:

#include <stdio.h>
#include <conio.h>
#include <list>

using namespace std;

//Example 01: Function to Push some values to List
void Add_ListElements(list<int>& listParam)
{
	listParam.clear();
	listParam.push_back(1);
	listParam.push_back(2);
	listParam.push_back(3);
	listParam.push_back(4);
	listParam.push_back(5);
	listParam.push_back(6);
}

//Example 02: Function to Print the Values in List
void Print_List(list<int> listParam)
{
	list<int>::iterator listItr;
	printf("\nThe contents of the Lists are:\n");
	for (listItr = listParam.begin();
		listItr != listParam.end();
		listItr++)
		printf("[%d] ", *listItr);
}

//Example 03a: Predicate to Remove even numbers
bool even_number(int param)
{
	if (param % 2 == 0)
		return true;
	else
		return false;
}

//Example 03b: Predicate to Remove divisible by 5
bool Divby5(int param)
{
	if (param % 5 == 0)
		return true;
	else
		return false;
}

//Example 01: Clear List through Remove_if and Predicates
void main()
{
	//1.0 Create list and iterator
	list<int> theList;

	//2.0 Let us push some elements to the List
	Add_ListElements(theList);

	//3.0 Print Content of the List
	Print_List(theList);

	//4.0 Remove even numbers
	printf("\nCalling Remove_if with even_number predicate");
	theList.remove_if(even_number);
	Print_List(theList);

	//5.0 Remove all numbers divisible by 5
	printf("\nCalling Divby5 predicate");
	theList.remove_if(Divby5);
	Print_List(theList);

	_getch();
}
Remove_if-Example-Output
Remove_if-Example-Output | Source

Comments

    0 of 8192 characters used
    Post Comment

    No comments yet.

    working

    This website uses cookies

    As a user in the EEA, your approval is needed on a few things. To provide a better website experience, hubpages.com uses cookies (and other similar technologies) and may collect, process, and share personal data. Please choose which areas of our service you consent to our doing so.

    For more information on managing or withdrawing consents and how we handle data, visit our Privacy Policy at: https://hubpages.com/privacy-policy#gdpr

    Show Details
    Necessary
    HubPages Device IDThis is used to identify particular browsers or devices when the access the service, and is used for security reasons.
    LoginThis is necessary to sign in to the HubPages Service.
    Google RecaptchaThis is used to prevent bots and spam. (Privacy Policy)
    AkismetThis is used to detect comment spam. (Privacy Policy)
    HubPages Google AnalyticsThis is used to provide data on traffic to our website, all personally identifyable data is anonymized. (Privacy Policy)
    HubPages Traffic PixelThis is used to collect data on traffic to articles and other pages on our site. Unless you are signed in to a HubPages account, all personally identifiable information is anonymized.
    Amazon Web ServicesThis is a cloud services platform that we used to host our service. (Privacy Policy)
    CloudflareThis is a cloud CDN service that we use to efficiently deliver files required for our service to operate such as javascript, cascading style sheets, images, and videos. (Privacy Policy)
    Google Hosted LibrariesJavascript software libraries such as jQuery are loaded at endpoints on the googleapis.com or gstatic.com domains, for performance and efficiency reasons. (Privacy Policy)
    Features
    Google Custom SearchThis is feature allows you to search the site. (Privacy Policy)
    Google MapsSome articles have Google Maps embedded in them. (Privacy Policy)
    Google ChartsThis is used to display charts and graphs on articles and the author center. (Privacy Policy)
    Google AdSense Host APIThis service allows you to sign up for or associate a Google AdSense account with HubPages, so that you can earn money from ads on your articles. No data is shared unless you engage with this feature. (Privacy Policy)
    Google YouTubeSome articles have YouTube videos embedded in them. (Privacy Policy)
    VimeoSome articles have Vimeo videos embedded in them. (Privacy Policy)
    PaypalThis is used for a registered author who enrolls in the HubPages Earnings program and requests to be paid via PayPal. No data is shared with Paypal unless you engage with this feature. (Privacy Policy)
    Facebook LoginYou can use this to streamline signing up for, or signing in to your Hubpages account. No data is shared with Facebook unless you engage with this feature. (Privacy Policy)
    MavenThis supports the Maven widget and search functionality. (Privacy Policy)
    Marketing
    Google AdSenseThis is an ad network. (Privacy Policy)
    Google DoubleClickGoogle provides ad serving technology and runs an ad network. (Privacy Policy)
    Index ExchangeThis is an ad network. (Privacy Policy)
    SovrnThis is an ad network. (Privacy Policy)
    Facebook AdsThis is an ad network. (Privacy Policy)
    Amazon Unified Ad MarketplaceThis is an ad network. (Privacy Policy)
    AppNexusThis is an ad network. (Privacy Policy)
    OpenxThis is an ad network. (Privacy Policy)
    Rubicon ProjectThis is an ad network. (Privacy Policy)
    TripleLiftThis is an ad network. (Privacy Policy)
    Say MediaWe partner with Say Media to deliver ad campaigns on our sites. (Privacy Policy)
    Remarketing PixelsWe may use remarketing pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to advertise the HubPages Service to people that have visited our sites.
    Conversion Tracking PixelsWe may use conversion tracking pixels from advertising networks such as Google AdWords, Bing Ads, and Facebook in order to identify when an advertisement has successfully resulted in the desired action, such as signing up for the HubPages Service or publishing an article on the HubPages Service.
    Statistics
    Author Google AnalyticsThis is used to provide traffic data and reports to the authors of articles on the HubPages Service. (Privacy Policy)
    ComscoreComScore is a media measurement and analytics company providing marketing data and analytics to enterprises, media and advertising agencies, and publishers. Non-consent will result in ComScore only processing obfuscated personal data. (Privacy Policy)
    Amazon Tracking PixelSome articles display amazon products as part of the Amazon Affiliate program, this pixel provides traffic statistics for those products (Privacy Policy)