HOWTO: STL Sample for [list::remove, remove_if] Function(s)

ID: Q168047


The information in this article applies to:
  • The Standard C++ Library, used with:
    • Microsoft Visual C++, 32-bit Editions, versions 4.2, 5.0, 6.0


SUMMARY

The sample code below illustrates how to use the [list::remove, list::remove_if] STL function(s) in Visual C++.

Note that there are some differences in the implementation of the Standard C++ Library components in Visual C++ version 4.2 versus later revisions. The relevant sections of code below compile conditionally based upon the value of _MSC_VER.


MORE INFORMATION

Required Header


   <list>
   <string>
   <iostream> 

Prototype


   void remove(const T& x);
   void remove_if(binder2nd&lt; not_equal_to<T> > pr); 
NOTE: The class/parameter names in the prototype may not match the version in the header file. Some have been modified to improve readability.

Description

This example shows how to use list::remove and list::remove_if. It also shows how to use list::remove_if with your own function.

Sample Code


   ////////////////////////////////////////////////////////////////////// 
   // 
   // Compile options needed: -GX
   // 
   // remove.cpp :  This example shows how to use list::remove and
   //               list::remove_if.  It also shows how to use
   //               list::remove_if with your own function.
   // 
   // Functions:
   // 
   //  list::remove
   //  list::remove_if
   // 
   // Written by Andrew Bradnan
   // Copyright (c) 1996 Microsoft Corporation. All rights reserved.
   ////////////////////////////////////////////////////////////////////// 


   #pragma warning(disable:4786) // disable spurious C4786 warnings

   #include <list>
   #include <string>
   #include <iostream>

   #if _MSC_VER > 1020   // if later than revision 4.2
   using namespace std;   // std c++ libs are implemented in std
   #endif

   typedef list<string, allocator<string> > LISTSTR;

   // Used to customize list::remove_if()
   class is_four_chars
      : public not_equal_to<string>
   {
      bool operator()(const string& rhs, const string&) const
      {  return rhs.size() == 4; }
   };

   void main()
   {
      LISTSTR test;
      LISTSTR::iterator i;

      test.push_back("good");
      test.push_back("bad");
      test.push_back("ugly");

      // good bad ugly
      for (i = test.begin(); i != test.end(); ++i)
         cout << *i &lt;&lt; " ";
      cout << endl;

      test.remove("bad");

      // good ugly
      for (i = test.begin(); i != test.end(); ++i)
         cout << *i << " ";
      cout << endl;

      // remove any not equal to "good"
      test.remove_if(binder2nd<not_equal_to<string> >
         (not_equal_to<string>(), "good"));

      // good
      for (i = test.begin(); i != test.end(); ++i)
         cout << *i << " ";
      cout << endl;

      // Remove any strings that are four characters long
      test.remove_if(binder2nd<not_equal_to<string> >
         (is_four_chars(), "useless parameter"));

      if (test.empty())
         cout << "Empty list\n";

   } 

Program Output


   good bad ugly
   good ugly
   good
   Empty list 


REFERENCES

Visual C++ Books On Line: Visual C++ Books:C/C++:Standard C++ Library Reference.

Additional query words: STL STLSample [xxxx]

Keywords : kbcode kbVC420 kbVC500 kbVC600 STLIss
Version : winnt:4.2,5.0,6.0
Platform : winnt
Issue type : kbhowto


Last Reviewed: December 2, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.