在向量STL C++中查找项

在向量STL C++中查找项,c++,vector,stl,C++,Vector,Stl,假设,我有一个x=10的值,我有一个名为vec的向量。现在,请看一下这个片段,如果你能帮我澄清我的疑问,那就太好了 if(find(vec.begin(),vec.end(),x)==vec.end()) { statement; } 现在,我的问题是,我在向量上找到x。如果我能在这个向量中找到x,那么语句将被执行。为什么我必须在那里写==vec.end?这个特殊事物的作用是什么?find返回一个迭代器,该迭代器引用找到的元素,如果没有找到元素,则返回end。所以你的代码是错误的,应该是 if

假设,我有一个x=10的值,我有一个名为vec的向量。现在,请看一下这个片段,如果你能帮我澄清我的疑问,那就太好了

if(find(vec.begin(),vec.end(),x)==vec.end())
{ statement; }
现在,我的问题是,我在向量上找到x。如果我能在这个向量中找到x,那么语句将被执行。为什么我必须在那里写==vec.end?这个特殊事物的作用是什么?

find返回一个迭代器,该迭代器引用找到的元素,如果没有找到元素,则返回end。所以你的代码是错误的,应该是

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

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

find返回迭代器,显示它找到x的元素。如果找不到x,它将返回vec.end,因此逻辑正好相反:当找不到x时,将执行语句。

这是因为返回一个迭代器而不是布尔值。如果在向量中找到x,它将不会==vec.end,所以只有在找不到x时才会执行语句。