将.end()与值进行比较

时间:2013-03-23 20:44:00

标签: c++

我正在写一个奇怪布局的棋盘游戏,所以我从一个点到地方的价值有一个map。如果该地点为空,则它不在地图中,因此如果find返回end(),则地点为空。如果我想检查特定地点的颜色是什么,请使用以下内容。这段代码有效吗?换句话说,将endlColour

进行比较是安全的

enum COLOUR {BLACK,WHITE}

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

其中lColour的类型为COLOUR

3 个答案:

答案 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)

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