为什么这段代码运行得这么慢?

时间:2014-01-06 00:38:28

标签: c++ optimization profiling

我被这段代码严重困扰,我已经运行了gprof并发现该程序在contains()函数中花费了40%的时间,该函数运行大约8000次。程序本身总共需要15秒才能运行。有没有人知道为什么需要这么长时间,或者它可能是什么?

// Check a list to see if it contains a tile object at x,y
bool contains(std::list<struct Tile>* list, int x, int y){
  std::list<struct Tile>::iterator it;
  for(it = list->begin(); it != list->end(); it++){
    if((*it).x == x && (*it).y == y){
      return true;
    }
  }
  return false;
}

1 个答案:

答案 0 :(得分:3)

使用std::vector,它的遍历速度大约快100倍,因为它对缓存友好。矢量push_back具有O(1)摊销难度,就像列表一样。无论如何,向量对于中间插入是不好的。 此外,std::mapstd::unordered_map专为快速搜索而设计。