c++ - 使用 for_each 标准或 boost 工具优化循环

标签 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;
      }
    }
  }

我想知道是否可以优化上面的代码排除定义一个函数来这样做。

最佳答案

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

  • 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/

相关文章:

c++ - 从另一个类访问 Qt ui

c++ - 从 Boost 1.49 迁移到 Boost 1.54 时,Boost::Spirit 编译器错误

c++ - boost::asio io_service 线程池与 io_service::work

c++ - 不应该发生的缓冲区溢出(?)

C++#include和#import的区别

c++ - 在 Arduino 中转换为字符的字符串

c++ - 将 protobuf 与 boost asio 结合使用

c++ - struct c++的内存分配和释放

c++ - 使用 UNC 路径读取/写入文件 - 在 C++ 中

python - 如何 "install"由boost.python制作的自定义python模块