我正在写一个奇怪布局的棋盘游戏,所以我从一个点到地方的价值有一个map
。如果该地点为空,则它不在地图中,因此如果find
返回end()
,则地点为空。如果我想检查特定地点的颜色是什么,请使用以下内容。这段代码有效吗?换句话说,将end
与lColour
enum COLOUR {BLACK,WHITE}
this->mBoard.find(Point(p.x - 1, p.y))->second == lColour
其中lColour
的类型为COLOUR
答案 0 :(得分:2)
不,你在做什么并不安全。过去的结束迭代器(由end()
返回的迭代器)无法解除引用。你对->
的结果做了find()
:如果结果是过去的结果,你就是在调用未定义的行为。
答案 1 :(得分:2)
没有
在尝试获取第二个元素之前,你应该检查find!= end返回的迭代器。
const auto& point_color = this->mBoard.find(Point(p.x - 1, p.y);
if (point_color != this->mBoard.end() &&
point_color->second == lColour) {
// something
}
答案 2 :(得分:1)
不,不是因为它意味着取消引用结束迭代器,这是未定义的行为。