我尝试优化下面的循环。它对结构类型的 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;
}
}
}
我想知道是否可以优化上面的代码排除定义一个函数来这样做。
最佳答案
这在很大程度上取决于上下文,比如
- DoublePointsOnEdgeCheck 的数据依赖性引用位置是什么?
_type==ISIDE_WITH_MORE_ONE_INTER
点的相对频率是多少?积分是怎么排序的?- 一个点的内存布局是怎样的?等
Just profile it, and /imagine/ what would make the algorithm zip quicker through the set.
例如
- “如果我不必遍历所有点呢?”
“如果点已经按
_type
索引/排序了怎么办?” (您可以使用简单的equal_range(INSIDE_WITH_MORE_ONE_INTER)
调用来减少工作量)如果我根本不做这项工作,而是懒惰地重新评估访问器
type() 中的
?”(或者这是否过多地破坏了常量性?线程?)_type
的值会怎样
等等
关于c++ - 使用 for_each 标准或 boost 工具优化循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27038018/