在向量 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++ 中查找项目的主要内容,如果未能解决你的问题,请参考以下文章
如何使 c++ 代码既可用于 Qt 项目(QTL 风格)也可用于 C++ 项目(STL 风格)
C ++向量 - 查找(“'operator =='不匹配”)