This code is written on fly, plz ignore syntax mistakes if any.
std::list<MY_STRUCT> myList;
MY_STRUCT theStruct;
myList.push_back( theStruct );
myList.push_back( theStruct );
// assume I store the pointer of the last item (the 2nd item in this case).
MY_STRUCT * item2 = &myList.back();
// I added another item
myList.push_back( theStruct );
// now I want to delete item2 that I stored bases on its pointer.
// Can myList.remove_if(...) help if so how?
I want to delete the middle item in the list by its pointer (assume I have the pointer value).
I know I can iterate through the list and look for this pointer but is there a better way? Does STL provide a function to do it..Can I use remove_if() in this case to delete the item?
Sure,
list::remove_ifuses whatever condition you give it. For exampleMankarse’s point is good though – if you can use an iterator instead of a pointer to identify the item you’re interested in, then you don’t need to mess about with this.
Beware also that we’re relying here on the fact that the address of an item in a
liststays the same forever. That isn’t always true of all collections, for examplevectormight have to relocate all the data when you callpush_back. If it does, then your middle item is no longer pointed to byitem2. Each collection documents which operations can invalidate iterators and/or references to elements.