C++ BOOST_FOREACH变体,用于从容器中删除当前已处理的元素
我在寻找BOOST_FOREACH,它可以抵抗从容器中删除当前处理的元素,在容器中删除元素不会使迭代器失效,除了指向已删除元素的迭代器,也就是FOREACH所持有的迭代器。 像链表这样的容器就是一个典型的例子,当我们大量使用boost侵入式列表时,基于这个例子的for循环开始变得过于频繁C++ BOOST_FOREACH变体,用于从容器中删除当前已处理的元素,c++,boost,foreach,iterator,C++,Boost,Foreach,Iterator,我在寻找BOOST_FOREACH,它可以抵抗从容器中删除当前处理的元素,在容器中删除元素不会使迭代器失效,除了指向已删除元素的迭代器,也就是FOREACH所持有的迭代器。 像链表这样的容器就是一个典型的例子,当我们大量使用boost侵入式列表时,基于这个例子的for循环开始变得过于频繁 //NumberList is boost intrusive list of structures, containing number property void removeEvenNumbers(Nu
//NumberList is boost intrusive list of structures, containing number property
void removeEvenNumbers(NumberList& numbers)
{
NumberList::iterator next = numbers.begin();
for (NumberList::iterator i = numbers.begin(); i != numbers.end(); i = next)
{
++next;
if (i->number % 2 == 0)
i->unlink();
}
}
编辑:请注意,这个例子可以通过remove_来解决,但在实际场景中,它通常不可用或不实用
我正在寻找foreach变体,它允许我编写更优雅的源代码
void removeEvenNumbers(NumberList& numbers)
{
BOOST_FOREACH_RESISTANT(NumberList::value_type& item, numbers)
if (item.number % 2 == 0)
item.unlink();
}
从用于在boost中创建原始FOREACH的现有组件创建此类宏的最简单方法是什么