0

私は奇妙なレイアウトのボードゲームを書いているのでmap、ポイントから場所の価値までを持っています。場所が空の場合、それはマップにありません。したがって、find戻り値の場合end()、場所は空です。特定の場所の色を確認したい場合は、以下を使用します。このコードは有効ですか?言い換えれば、比較するのは安全ですendlColour

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

いいえ。

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 に答える