By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
454,132 Members | 1,267 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 454,132 IT Pros & Developers. It's quick & easy.

removing an element during iteration error

P: n/a
mChannelEventQueue is a deque of pointers to ChannelEvent objects

If the first ChannelEvent in the queue is flagged for removal. How can
I iterate through, check for removal flag and remove without getting
error on the 2nd iteration?
// Remove processed events
for(it_event = m_channelEventQueue.begin(); it_event !=
m_channelEventQueue.end(); it_event++)
{
if( (*it_event)->m_processed)
{
delete (*it_event);
m_channelEventQueue.erase(it_event);
}
}

My compiler goves me an error that says "Assertion; Expression: ("this-
>_Mycont !=0", 0)
This is a built in assertion I assume. Which is coming up because
after I erase an element, it already is at the end, and then it trys
to increment it. Not sure how to iterate through and delete elements
then...

Mar 14 '07 #1
Share this Question
Share on Google+
2 Replies


P: n/a
brekehan wrote:
mChannelEventQueue is a deque of pointers to ChannelEvent objects

If the first ChannelEvent in the queue is flagged for removal. How can
I iterate through, check for removal flag and remove without getting
error on the 2nd iteration?
Isn't it in the FAQ?
>

// Remove processed events
for(it_event = m_channelEventQueue.begin(); it_event !=
m_channelEventQueue.end(); it_event++)
Drop the "it_event++" (BTW, you should consider using ++it_event
instead in such situations, anyway, but do drop it).
{
if( (*it_event)->m_processed)
{
delete (*it_event);
m_channelEventQueue.erase(it_event);
If your 'EventQueue' is a list, change to

it_event = m_channelEventQueue.erace(it_event);
}
Add
else
++it_event;
}

My compiler goves me an error that says "Assertion; Expression:
("this-
>_Mycont !=0", 0)
This is a built in assertion I assume. Which is coming up because
after I erase an element, it already is at the end, and then it trys
to increment it. Not sure how to iterate through and delete elements
then...
Look in the archives. There were plenty of questions on iteration
and deletion.

V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
Mar 14 '07 #2

P: n/a
Victor Bazarov <v.********@comacast.netwrote:
brekehan wrote:
>mChannelEventQueue is a deque of pointers to ChannelEvent objects

If the first ChannelEvent in the queue is flagged for removal. How can
I iterate through, check for removal flag and remove without getting
error on the 2nd iteration?

Isn't it in the FAQ?
Actually, I don't think it is, though it probably should be.

--
Marcus Kwok
Replace 'invalid' with 'net' to reply
Mar 14 '07 #3

This discussion thread is closed

Replies have been disabled for this discussion.