我被這段代碼嚴重困擾了,我運行了gprof,發現程序花費了運行約8000次的contains()函數的40%的時間。程序本身總共需要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'。它更乾淨。 –