Closed. This question is opinion-based。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
                        
                        4年前关闭。
                                                                                            
                
        
我正在尝试从玩家的位置找到最近的医疗包或敌人。我这样写:

for(auto &hp : model->getAllHealthPacks()){
    if(!hp->getUsed()){
        int x = hp->getXPos();
        int y = hp->getYPos();
        int q = (x*x)+(y*y);
        if(q < smallest){
            smallest = z;
            hpfound = hp;
            foundAHp++;
        }
    }
}


现在我想知道,这实际上是不合适的。是否有更好的专业方法来改进我的代码? (Lambda,...)?

最佳答案

总体而言,代码还不错,但是仍有一些改进的空间。首先,您可以使变量hp为常数,因为您没有修改变量的内容。

您还可以创建一个类来将坐标存储在这样的单个对象中

class Coordinate{
    std::pair<int,int> coords;
...
};


最终代码如下所示:

for(const auto &hp : model->getAllHealthPacks()){
    if(!hp->getUsed()){
        Coordinate coord(hp->getCoord());
        int q = coord.getX()*coord.getX()+coord.getY()*coord.getY();
        if(q < smallest){
            smallest = z;
            hpfound = hp;
            foundAHp++;
        }
    }
}


您还应该将q重命名为更清晰的名称,以供将来参考。

10-08 05:03