将.end()与值进行比较
Comparing .end() against a value
我正在编写一个具有奇怪布局的棋盘游戏,所以我有一个从点到位置值的map
。如果位置为空,则不在地图中,因此如果find
返回end()
,则该位置为空。如果我想检查一个特定的地方的颜色是什么,我使用以下命令。这个代码有效吗?或者换句话说,比较end
和lColour
是否安全
enum COLOUR {BLACK,WHITE}
this->mBoard.find(Point(p.x - 1, p.y))->second == lColour
其中lColour
为COLOUR
类型
不,你这样做不安全。不能解引用过端迭代器(由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
}
不,因为它意味着解引用结束迭代器,这是未定义的行为。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- std::设置自定义比较器
- 布尔比较运算符是如何在C++中工作的
- C++将目录中的所有文件与::filesystem进行比较
- shell排序中的交换和比较
- 如何在C++中比较两个char数组
- catch框架有没有办法比较流或文件
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 智能指针作为无序映射键,并通过引用进行比较
- C 比较两个INT,错误或Wierd End
- 将.end()与值进行比较