【发布时间】:2026-02-05 20:20:03
【问题描述】:
我被这段代码严重难住了,我运行了 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;
}
【问题讨论】:
-
列表搜索效率不高。为什么不使用向量?
-
嗯,你的名单有多长?线性搜索并不是特别有效(但它与您在链表上获得的效果差不多。)
-
删除
struct,只需Tile。它更干净。 -
+1 表示“我已经运行了 gprof”。不过请注意答案!
-
另外,
for (Tile t : list)可能更高效(缓存list->end())。
标签: c++ optimization profiling