2014-02-26 272 views
1

该代码片段确定整数是否在名为engie的列表中。在列表中查找值

回报的std ::发现(engie.begin(),engie.end(),find_value)= engie.end()!;

为什么它是一个if语句比较迭代器到列表的末尾? 我意识到查找范围是[第一个,最后一个]

因此,对于包含整数{1,2,3}的列表,不是最后一个= 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

是这个C++代码? – jeremyjjbrown

+0

是的,对不起。忘了添加标签。 –

+0

'[first,last]'表示包含“first”,但“last”不包含。请注意方括号和圆括号。 – juanchopanza

回答

1

std::find(b, e, v)在半开区间[b,e),即未计入最后的位置e,并返回其中v找到的第一个位置,或者e如果v范围内没有发现搜索价值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; 
} 
0

在STL列表{1,2,3},结束()不指向3,它指向过去3一个元素或列表中的“结束”。 find函数迭代列表,如果当前迭代器等于您正在尝试查找的值,则返回迭代器。如果它从来没有找到它返回的值end(),因为通过列表中最后一个元素的一个元素将是end()。

1

函数 find (InputIterator first, InputIterator last, const T& val)返回第一个匹配的位置(如果匹配)。否则它返回的最后位置。它会搜索范围[第一,最后)。该范围包括第一个元素,但不包括最后的

因此,在迭代器不等于最后一个元素(即engie.end)的代码片段中,您会得到匹配并返回匹配的位置。

可以参考this

+0

您的搜索范围错误。 – juanchopanza

+0

你能解释它是怎么错的吗? – tempusfugit

+0

你需要'[first,last]',而不是'[first,last]'。 – juanchopanza

0

find方法返回一个迭代器的位置(如果找到)或值engie.end()

该比较仅仅是将返回值转换为真,如果发现,否则为假