将.end()与值进行比较

Comparing .end() against a value

本文关键字:比较 end      更新时间:2023-10-16

我正在编写一个具有奇怪布局的棋盘游戏,所以我有一个从点到位置值的map。如果位置为空,则不在地图中,因此如果find返回end(),则该位置为空。如果我想检查一个特定的地方的颜色是什么,我使用以下命令。这个代码有效吗?或者换句话说,比较endlColour是否安全

enum COLOUR {BLACK,WHITE}

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

其中lColourCOLOUR类型

不,你这样做不安全。不能解引用过端迭代器(由end()返回的迭代器)。你正在做->find()的结果:如果结果是过去的结束,你调用未定义的行为。

No.

在尝试获取第二个元素之前,应该检查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
}

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