在矢量 STL C++ 中查找项目
Finding a item in vector STL C++
假设我有一个值 x=10 并且我有一个名为 vec 的向量。现在,请看一下代码片段,如果你能帮助我消除疑虑就太好了。
if(find(vec.begin(),vec.end(),x)==vec.end())
{ statement; }
现在,我的问题是我在矢量上找到 x。如果我能够在这个向量中找到 x,那么将执行“语句”。为什么我必须在那里写“==vec.end()”?这个东西的作用是什么?
find
return 一个 迭代器 引用找到的元素或 end()
如果它 not 找到元素。所以你的代码写错了,应该是
if(find(vec.begin(),vec.end(),x)!=vec.end())
{ statement; }
你的问题是为什么会这样。好吧,让 find
return 一个找到的元素的迭代器很有用(而不仅仅是一个布尔值)。鉴于 find
必须 return 一个具有它的迭代器 return end()
当它没有找到任何东西时是合乎逻辑的,因为 end()
是一个迭代器值不引用向量中的任何元素。
找到 returns 显示元素的迭代器,它在其中找到了 x。如果找不到 x,它将 return vec.end()
,因此逻辑正好相反:当找不到 x 时,将执行语句。
假设我有一个值 x=10 并且我有一个名为 vec 的向量。现在,请看一下代码片段,如果你能帮助我消除疑虑就太好了。
if(find(vec.begin(),vec.end(),x)==vec.end())
{ statement; }
现在,我的问题是我在矢量上找到 x。如果我能够在这个向量中找到 x,那么将执行“语句”。为什么我必须在那里写“==vec.end()”?这个东西的作用是什么?
find
return 一个 迭代器 引用找到的元素或 end()
如果它 not 找到元素。所以你的代码写错了,应该是
if(find(vec.begin(),vec.end(),x)!=vec.end())
{ statement; }
你的问题是为什么会这样。好吧,让 find
return 一个找到的元素的迭代器很有用(而不仅仅是一个布尔值)。鉴于 find
必须 return 一个具有它的迭代器 return end()
当它没有找到任何东西时是合乎逻辑的,因为 end()
是一个迭代器值不引用向量中的任何元素。
找到 returns 显示元素的迭代器,它在其中找到了 x。如果找不到 x,它将 return vec.end()
,因此逻辑正好相反:当找不到 x 时,将执行语句。