我被这段代码严重困扰,我已经运行了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;
}
答案 0 :(得分:3)
使用std::vector
,它的遍历速度大约快100倍,因为它对缓存友好。矢量push_back具有O(1)摊销难度,就像列表一样。无论如何,向量对于中间插入是不好的。
此外,std::map
和std::unordered_map
专为快速搜索而设计。