Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ BOOST_FOREACH变体,用于从容器中删除当前已处理的元素_C++_Boost_Foreach_Iterator - Fatal编程技术网

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

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

我在寻找BOOST_FOREACH,它可以抵抗从容器中删除当前处理的元素,在容器中删除元素不会使迭代器失效,除了指向已删除元素的迭代器,也就是FOREACH所持有的迭代器。 像链表这样的容器就是一个典型的例子,当我们大量使用boost侵入式列表时,基于这个例子的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_来解决,但在实际场景中,它通常不可用或不实用

我正在寻找foreach变体,它允许我编写更优雅的源代码

void removeEvenNumbers(NumberList& numbers)
{
  BOOST_FOREACH_RESISTANT(NumberList::value_type& item, numbers)
    if (item.number % 2 == 0)
      item.unlink();
}
从用于在boost中创建原始FOREACH的现有组件创建此类宏的最简单方法是什么