此代码段确定整数是否在名为engie
的列表中。
return std :: find(engie.begin(),engie.end(),find_value)!= engie.end();
为什么if语句将迭代器与列表末尾进行比较? 我发现查找范围来自[第一个,最后一个]
因此对于包含整数{1,2,3}的列表,不是last = 3?
如果没有搜索,它如何找到3
?
Input iterators to the initial and final positions in a sequence. The range searched is [first,last), which contains all the elements between first and last, including the element pointed by first but not the element pointed by last.
答案 0 :(得分:1)
std::find(b, e, v)
在半开放范围v
中搜索值[b,e)
,即排除最后一个位置e
,并返回v
的第一个位置找到},或e
如果在范围内找不到v
。所以检查
std::find(b, e, v) != e
表示“ v
在范围[b,e)
中找到”。您可以将std::find
视为
template<typename I, typename T>
I find(I b, I e, const T& v)
{
while (b != e && !(*b == v))
++b;
return b;
}
答案 1 :(得分:1)
功能
如果匹配,则find (InputIterator first, InputIterator last, const T& val)
返回第一个匹配的位置。否则它返回最后位置。它将在[first,last]范围内搜索。此范围包括第一个元素但不包括最后一个。
因此,在迭代器不等于最后一个元素(即engie.end)的代码片段中,您将获得匹配并返回匹配的位置。
您可以参考this
答案 2 :(得分:0)
在STL列表{1,2,3}中,end()不指向3,它指向过去3的一个元素或列表的“结束”。 find函数迭代列表,如果当前迭代器等于您尝试查找的值,则返回迭代器。如果它从未找到该值,则返回end(),因为超过列表中最后一个元素的一个元素将是end()。
答案 3 :(得分:0)
find
方法返回位置(如果找到)或值engie.end()
的迭代器。
比较只是将返回值转换为true(如果找到),否则为