在向量 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++)

如何使 c++ 代码既可用于 Qt 项目(QTL 风格)也可用于 C++ 项目(STL 风格)

C ++向量 - 查找(“'operator =='不匹配”)

C++:问题向量 STL

如何在 WebAssembly 中使用(C++ STL 的)向量

C++ STL 中向量的恒定时间交换逻辑