我使用最常用的方法在小列表中搜索某个特定对象:
iterator=std::find(begin, end, whatToFind);
如果std :: find没有找到该元素,它将在容器的末尾返回迭代器,所以最常见的建议在SO方式上:
if (iterator != end) {
found
} else {
not found
}
但如果我要找的元素到底是什么呢?或者它可能是一个列表,仅包含我正在寻找的元素?我真的需要手动检查这些条件还是有某种标志(我不知道),这肯定标志着not_found案例? 谢谢。
答案 0 :(得分:4)
如果搜索项位于列表(容器)的末尾,则迭代器不引用end()
。迭代器end()
是一个保留(占位符)迭代器,是你最后一个项目之后的下一个迭代器。但是它并不适用于begin()
,它实际上是指容器内的第一个项目。一般来说,C ++范围的形式为[begin,end]。
返回元素的最后一个元素后面的元素的迭代器 容器。该元素充当占位符;试图访问它 导致未定义的行为。 †
答案 1 :(得分:3)
但是如果我要找的元素到底是什么呢?
不可能。结束(即end()
返回的迭代器)不指向有效元素。容器中的最后一个元素(如果元素数多于零)是迭代器在 end()
之前指向的元素。
或许这是一个列表,只包含我要找的元素?
然后find
将不会返回end
。它将返回begin
。在这种情况下,直接在end
之前。
答案 2 :(得分:3)
end()
未指向有效元素(它指向最后一个元素之后的一个元素)。因此没有歧义。