我试图遵循并分解pacman克隆的源代码。我有一个if语句,令我感到困惑。
void PacMan::queueDirection(Direction dir)
{
if (!directions.empty())
{
if (dir == -directions.front()) //this statement
{
std::queue<Direction> clear;
std::swap(directions, clear);
}
}
if(directions.size() < 2)
directions.push(dir);
}
我的问题是-directions.front()的-infront做什么?方向是一个队列。是否会将front()返回的引用乘以-1?感谢您的帮助-请在下面将链接发布到整个项目所在的github。
https://github.com/HexagonNico/Pac-Man/blob/master/PacMan.cpp如果让您喜欢。
最佳答案
您粘贴的代码似乎具有以下目的:
如果队列开头的Direction实例Directions是作为此函数的参数提供的值的负数,则清除队列,并将提供的参数排队。
在这种情况下,类型Direction是标题Directions.h中定义的枚举
enum Direction
{
Up = 1,
Down = -1,
Left = 2,
Right = -2,
Unset = 0
};
在这种情况下,否定Direction实例,恰恰相反。例如,假设在调用函数时,值Direction::Up位于队列的开头,并且函数的参数为Direction::Down。在这种情况下,队列方向将被清除。我添加了example来使这一点更清楚。