在向量 STL C++ 中查找项目

Posted

技术标签:

【中文标题】在向量 STL C++ 中查找项目【英文标题】:Finding a item in vector STL C++ 【发布时间】:2020-09-26 15:07:13 【问题描述】:

假设,我有一个值 x=10,我有一个名为 vec 的向量。现在,请看一下sn-p,如果你能帮助我消除我的疑问,那就太好了。

if(find(vec.begin(),vec.end(),x)==vec.end())
 statement; 

现在,我的问题是我在向量上找到 x。如果我能够在此向量中找到 x,则将执行“语句”。为什么我必须在那里写“==vec.end()”?这个特殊的东西有什么作用?

【问题讨论】:

那是因为std::find() 返回的是一个迭代器,而不是一个布尔值。 如果在向量中找到x,那么它就不是== vec.end(),所以只有在没有找到x时才会执行语句。 【参考方案1】:

find 返回一个 iterator 引用找到的元素或 end() 如果它 not 找到该元素。所以你的代码是错误的,应该是

if(find(vec.begin(),vec.end(),x)!=vec.end())
 statement; 

你的问题是为什么会这样。好吧,让find 返回一个迭代器到找到的元素(而不仅仅是一个布尔值)是很有用的。既然find 必须返回一个迭代器,当它找不到任何东西时它返回end() 是合乎逻辑的,因为end() 是一个不引用向量中任何元素的迭代器值。

【讨论】:

【参考方案2】:

find 返回显示元素的迭代器,它在哪里找到 x。如果没有找到x,它将返回vec.end(),所以逻辑正好相反:当没有找到x时,将执行语句。

【讨论】:

以上是关于在向量 STL C++ 中查找项目的主要内容,如果未能解决你的问题,请参考以下文章