0

我正在写一个布局奇怪的棋盘游戏,所以我有一个map从一个点到一个地方的价值。如果该地点是空的,则它不在地图中,因此如果find返回end()该地点是空的。如果我想检查某个地方的颜色是什么,我会使用以下内容。此代码有效吗?或者换句话说,比较是否end安全lColour

enum COLOUR {BLACK,WHITE}

this->mBoard.find(Point(p.x - 1, p.y))->second == lColour

lColour类型在哪里COLOUR

4

3 回答 3

2

不,你所做的并不安全。过去的迭代器(返回的那个end())不能被取消引用。您正在->find(): 的结果进行处理,如果该结果是过去的,那么您正在调用未定义的行为。

于 2013-03-23T20:50:03.493 回答
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
}
于 2013-03-23T21:00:01.580 回答
1

不,这不是因为这意味着取消引用结束迭代器,这是未定义的行为。

于 2013-03-23T20:50:35.253 回答