나는이 코드에 심각하게 난처 해하며 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'됩니다. 깨끗해. –