在std :: vector中查找一个项目
我想检查vector中是否存在元素,所以我可以处理每种情况。 我遇到这个公式:
#include <algorithm>
if ( std::find(vector.begin(), vector.end(), item) != vector.end() )
do_this();
else
do that();
我不明白为什么我们需要vector.end()在最后,没有找到(vector.begin(),vector.end(),item)足以找到元素?
std::find(vector.begin(), vector.end(), item)
将会返回一个Iterator,所以通过比较它
vector.end()
你实际上正在检查是否存在这样的迭代器。
我不明白为什么我们需要vector.end()在最后,没有找到(vector.begin(),vector.end(),item)足以找到元素?
结果find
在没有找到匹配的是指向提供的范围的末端的迭代器,并没有什么特别之处结束迭代器,使他们能够像一个布尔值状态进行比较。
find
被设计为一种通用算法,适用于各种各样的容器(甚至包括那些可能在标准库之外的容器)。 它也被设计成不仅仅是返回一个元素是否被找到 - 它返回一个指向该项目的迭代器(如果找到的话)。 因此,如果它找不到元素,它不会返回null或类似的东西。 它返回迭代器。
如果你真的做了很多这样的事情(而且我只建议你做这样的事情,因为你在日常代码中引入了一些外来的东西),你可以这样做:
/// @return True if `val` is found in `[first, last)`
template <class Iterator, class Element>
bool contains(Iterator first, Iterator last, const Element& val)
{
return std::find(first, last, val) != last;
}
...
if (contains(vector.begin(), vector.end(), item))
do_this();
else
do_that();
它正在检查值是否真的被发现。
std :: find()返回查询范围中第一个元素的迭代器。
如果返回的值等于vector.end() ,那意味着它没有找到该项目。
看到这个更多的信息。