Cách thích hợp để lặp lại là sử dụng trình vòng lặp. Tuy nhiên, tôi nghĩ rằng bằng cách xóa, trình vòng lặp không hợp lệ.Xóa từ một std :: vector trong khi làm một cho mỗi?
Về cơ bản những gì tôi muốn làm là:
for(iterator it = begin; it != end; ++it)
{
if(it->somecondition())
{
erase it
}
}
Làm thế nào tôi có thể làm điều này mà không v [i] phương pháp?
Cảm ơn
struct RemoveTimedEvent
{
bool operator()(const AguiTimedEvent& pX, AguiWidgetBase* widget) const
{
return pX.getCaller() == widget;
}
};
void AguiWidgetContainer::clearTimedEvents(AguiWidgetBase* widget)
{
std::vector<AguiTimedEvent>::iterator it = std::remove_if(timedEvents.begin(),
timedEvents.end(), RemoveTimedEvent());
timedEvents.erase(it, timedEvents.end());
}
Xin cảm ơn! +1 :) – jmasterx
Tôi không chắc mình hiểu phương thức đầu tiên là N bình phương, tại sao nó không phải N, tôi chỉ lặp lại một lần để loại bỏ các mục. – jmasterx
Trừ khi ofcourse các iterator trở lại bằng cách xóa mang lại cho bạn trở lại đầu trang – jmasterx