【问题标题】:Finding a item in vector STL C++在向量 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时才会执行语句。

标签: c++ vector stl


【解决方案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时,将执行语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2011-10-12
      • 1970-01-01
      • 2016-01-31
      • 2018-10-10
      相关资源
      最近更新 更多