Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > removing an element during iteration error

Reply
Thread Tools

removing an element during iteration error

 
 
brekehan
Guest
Posts: n/a
 
      03-14-2007
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...

 
Reply With Quote
 
 
 
 
Victor Bazarov
Guest
Posts: n/a
 
      03-14-2007
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


 
Reply With Quote
 
 
 
 
Marcus Kwok
Guest
Posts: n/a
 
      03-14-2007
Victor Bazarov <(E-Mail Removed)> wrote:
> 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
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Struts - Problem with nested iteration or double iteration Rudi Java 5 10-01-2008 03:30 AM
"RuntimeError: dictionary changed size during iteration" ; Good atomiccopy operations? robert Python 29 03-14-2006 06:22 AM
Re: "RuntimeError: dictionary changed size during iteration" ;Good atomic copy operations? Jean-Paul Calderone Python 0 03-13-2006 03:41 AM
Re: RuntimeError: dictionary changed size during iteration Terry Reedy Python 0 01-20-2005 06:40 PM
RuntimeError: dictionary changed size during iteration Roman Suzi Python 0 01-19-2005 08:45 PM



Advertisments