我想检查一个元素是否存在于向量中,所以我可以处理每个案例。 我遇到了这个公式:
#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)足以找到元素?
答案 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。