[英]STL std::find() C++
在下面的代码中,我将向量声明为{1,2,3,4,5}
。
使用 STL std::find()
,我试图在从arr.begin()
到arr.end()-1
或arr.begin()
到arr.begin()+4
的向量中找到5
,即相同的范围从1
到4
。
但在这里,迭代器都返回指向5
。 为什么会这样,因为范围只有1
到4
?
#include <iostream>
#include <vector>
#include <array>
#include <algorithm>
using namespace std;
int main () {
vector<int> arr {1,2,3,4,5};
// TEST
for_each(arr.begin(), arr.begin()+4, [](const int &x) { cerr << x << " "; }); cerr << endl;
for_each(arr.begin(), arr.end()-1, [](const int &x) { cerr << x << " "; }); cerr << endl;
auto it1 {std::find(arr.begin(), arr.begin()+4, 5)};
auto it2 {std::find(arr.begin(), arr.end()-1, 5)};
if (it1 != arr.end())
cout << *it1 << " Found!" << endl;
else
cout << "NOT Found!" << endl;
if (it2 != arr.end())
cout << *it2 << " Found!" << endl;
else
cout << "NOT Found!" << endl;
return 0;
}
OUTPUT:
1 2 3 4
1 2 3 4
5 Found!
5 Found!
当未找到元素时, std::find
仅返回作为第二个参数传递的迭代器。 因此,它在您的代码中将迭代器作为arr.begin()+4
或arr.end()-1
返回。
您不应该将其与std::end
进行比较,例如
if (it1 != arr.begin()+4)
cout << *it1 << " Found!" << endl;
else
cout << "NOT Found!" << endl;
if (it2 != arr.end()-1)
cout << *it2 << " Found!" << endl;
else
cout << "NOT Found!" << endl;
这是因为如果std:find
没有找到请求的值(因为它出现在这里),它返回你给它的结束迭代器(不是完整向量的结束迭代器),在这种情况下指向你所在的元素寻找。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.