使用for_each标准或增强工具优化循环

时间:2014-11-20 11:04:59

标签: c++ boost

我尝试优化以下循环。它对结构类型的std :: vector进行for循环。然后它检查是否有任何类型等于“INSIDE_WITH_MORE_ONE_INTER”的成员。如果它找到了这样的成员,它会对它应用一个函数,最后根据结果可以将更改类型保持为“NOT_DEFINED”。

for(pnt_vec_iter pnt_iter = newpnTs.begin(); pnt_iter != newpnTs.end(); pnt_iter++)
  {
    if(pnt_iter->_type == INSIDE_WITH_MORE_ONE_INTER)
    {
      if(!DoublePointsOnEdgeCheck(*this, pnt_iter->_face, pnt_iter))
      {
        pnt_iter->_type == NOT_DEFINED;
      }
    }
  }

我想知道是否可以优化上面的代码排除 定义函数来执行此操作。

1 个答案:

答案 0 :(得分:1)

这在很大程度上取决于上下文,例如

  • DoublePointsOnEdgeCheck对数据依赖性的引用位置是什么?
  • _type==ISIDE_WITH_MORE_ONE_INTER点的相对频率是多少?如何订购积分?
  • 点的内存布局是什么?等
  

只需对其进行分析,然后/想象/什么会使算法在集合中更快地拉链。

E.g。

  • "如果我不必遍历所有要点怎么办?"
  • "如果点已经被_type索引/排序怎么办?" (您使用简单的equal_range(INSIDE_WITH_MORE_ONE_INTER)调用来减少工作

  • 如果我完成工作,而是懒惰地重新评估访问者_typetype()的值,该怎么办?&#34 ; (或者这是否会破坏常量?线程?