Mark <mnbayazit@gmail.comwrites:
Quote:
I need a handle to an element in a vector so that I can erase it when
I'm done with it. I tried doing this:
>
buttons.push_back(this);
iter = buttons.end();
>
And then when I'm done with it, I did this:
>
buttons.erase(iter);
>
But my program just crashes. I don't think I'm allowed to store
iterators like that, since the memory location might change. I can't
store the index into the vector either, because that might change as
well. What can I do?
Read the doc of vector::end.
It doesn't return an iterator pointing to the last element of the
sequence, but one step beyond.
In the case of a vector, you're lucky, you can use button.end()-1,
assuming you could add other elements before erasing it. Otherwise it
would be simplier to just use pop_back.
http://www.cppreference.com/cppvector/index.html Quote:
Or, what other container types might be suitable that WOULD allow me
to do this? I need a resizeable container type that I can quickly
iterate over, and insert into (anywhere, doesn't matter) and remove
from (need handle for this).
Beware that if you insert or remove elements in the container, the
iterators you got before may (and for some class of container will)
become invalid.
--
__Pascal Bourguignon__
http://www.informatimago.com/
"This statement is false." In Lisp: (defun Q () (eq nil (Q)))