Search code examples
c++stlremove-if

In C++, removing an object from a list


I'm writing a program which is more or less like this :

#include <list>

list<MyClass> things;

class MyClass {
   // some stuff

   void remove() {
       things.remove_if(THING_IS_ME);
   }
};

What do I need to write instead of THING_IS_ME?

In other words, I'm using a global STL list as a collection of things. At some point, an object which is in the list recognises that it is redundant and wants to a) get itself removed from the list, and b) get itself destructed.

How do I do this?

I haven't written C++ for about 15 years and am a bit confused by this page here : http://www.cplusplus.com/reference/algorithm/remove_if/

What are these Predicates? Does C++ have higher-order functions now?


Solution

  • (Originally a set of comments, but rewritten as an answer after discovering what the OP actually wanted to do.)

    You do realize that the STL containers store copies of things you insert, right? That means instances of MyClass better be comparable (e.g. via operator==) - you can't just compare the addresses as they will always be different.

    If having copies of MyClass makes no sense, then you're probably better off with a pointer container.

    That being said, the C++ language uses copy-semantics by default. The language requires that you make things like references explicit in the code. I highly recommend that you pick up a good C++ book or you will be tripped up by issues like this in the future.