在列表中查找值

时间:2014-02-26 22:21:16

标签: c++ list

此代码段确定整数是否在名为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.

4 个答案:

答案 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(如果找到),否则为