gpt4 book ai didi

c++ - 从 lambda 访问 for_each 迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:23 25 4
gpt4 key购买 nike

是否可以访问 std::for_each 迭代器,这样我就可以使用 lambda 从 std::list 中删除当前元素(如下所示)

typedef std::shared_ptr<IEvent>    EventPtr;
std::list<EventPtr> EventQueue;
EventType evt;
...

std::for_each(
EventQueue.begin(), EventQueue.end(),

[&]( EventPtr pEvent )
{
if( pEvent->EventType() == evt.EventType() )
EventQueue.erase( ???Iterator??? );
}
);

我读过关于使用 [](typename T::value_type x){ delete x; } 在这里,但是 VS2010 似乎不喜欢这种说法(下划线 T 作为错误源)。

最佳答案

您使用了错误的算法。使用 remove_if:

EventQueue.remove_if([&](EventPtr const& pEvent)
{
return pEvent->EventType() == evt.EventType();
});

STL 算法不允许您访问用于迭代的迭代器。在大多数情况下,这是一件好事。

(此外,请考虑您是否真的想使用 std::list;它不太可能是您用例的正确容器。请考虑 std::vector,您可以使用 erase/remove idiom 删除满足特定谓词的元素。)

关于c++ - 从 lambda 访问 for_each 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11246525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com