【发布时间】:2020-05-26 09:58:46
【问题描述】:
在下面的代码中,我将一个向量声明为{1,2,3,4,5}。
使用STL std::find(),我试图在从arr.begin() 到arr.end()-1 或arr.begin() 到arr.begin()+4 的向量中找到5,这与从1 到@987654330 的范围相同@。
但在这里,迭代器返回指向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;
}
输出:
1 2 3 4
1 2 3 4
5 Found!
5 Found!
【问题讨论】:
-
用
{1,2,3,4,42,5}试试同样的方法
标签: c++ algorithm stl find containers