在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() ,那意味着它没有找到该项目。
看到这个更多的信息。

链接地址: http://www.djcxy.com/p/85871.html

上一篇: Finding an item in std::vector

下一篇: check if a std::vector contains a certain object?