我正在寻找能够阻止从容器中删除当前处理过的元素的BOOST_FOREACH,其中remove元素不会使迭代器无效(除了指向元素的那个被删除,因此是foreach控件的那个) )。 像链表这样的容器就是典型的例子,因为我们使用了boost inusive list,基于这个例子的for循环开始变得太频繁了。
//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_if解决,但在实际场景中,它通常不可用或不实用。
我正在寻找能让我编写更优雅的源代码的foreach变体。
void removeEvenNumbers(NumberList& numbers)
{
BOOST_FOREACH_RESISTANT(NumberList::value_type& item, numbers)
if (item.number % 2 == 0)
item.unlink();
}
从用于在boost中创建原始FOREACH的现有组件创建此类宏的最简单方法是什么?