在std :: vector中查找项目

时间:2015-11-26 17:57:49

标签: c++ vector std

我想检查一个元素是否存在于向量中,所以我可以处理每个案例。 我遇到了这个公式:

#include <algorithm>

if ( std::find(vector.begin(), vector.end(), item) != vector.end() )
   do_this();
else
   do that();

我不明白为什么我们最后需要vector.end(),isnt find(vector.begin(),vector.end(),item)足以找到元素?

3 个答案:

答案 0 :(得分:3)

std::find(vector.begin(), vector.end(), item)

将返回一个迭代器,因此将其与

进行比较
vector.end()

您实际上正在检查是否存在具有该项目的迭代器。

答案 1 :(得分:1)

  

我不明白为什么我们最后需要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();

答案 2 :(得分:0)

检查是否实际找到了该值 std :: find()返回查询范围中第一个元素的迭代器 如果返回的值等于 vector.end(),则表示它未找到该项目 有关详细信息,请参阅this