BOOST_FOREACH变体,用于从容器中删除当前处理的元素

时间:2014-04-11 09:52:51

标签: c++ boost foreach iterator

我正在寻找能够阻止从容器中删除当前处理过的元素的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的现有组件创建此类宏的最简单方法是什么?

0 个答案:

没有答案