find()是STL函数,位于< algorithm>头文件下面,该文件将迭代器返回到范围内搜索元素的第一个匹配项。
语法:
InputIterator find( InputIterator first, InputIterator last, const T& val);
哪里,
首先使用InputIterator-迭代器开始搜索范围
InputIterator last-迭代到搜索范围的结尾
const T&val-要搜索的数据类型T的值
什么是InputIterator?
迭代到找到搜索元素的范围的第一个位置。如果未找到搜索元素,则将迭代器返回到末尾
返回类型: bool
使用以上语法,搜索相应范围内的元素是否找到了搜索元素。
时间复杂度:线性时间,O(n)
binary_search()和find()函数之间的区别
std :: binary_search()函数返回布尔值,指示是否找到。它不返回位置。但是,std :: find()也会搜索位置。它将迭代器返回到第一个位置。
std :: binary_search()会以O(logn)时间进行搜索,而std :: find()会以线性时间进行搜索。
示例1:当找到被搜索元素并且在搜索范围内只有一个实例时
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> arr{ 1, 2, 3, 8, 4, 3 };
int searching_element = 8;
vector<int>::iterator it;
//范围= arr.begin()的起始迭代器
//范围的结束迭代器= arr.end()
it = find(arr.begin(), arr.end(), searching_element);
if (it != arr.end())
cout << searching_element << " //在以下位置: " << it - arr.begin() << endl;
else
cout << searching_element << "not found";
return 0;
}输出:
8 //在以下位置: 3
在上面的程序中,我们检查了搜索元素,并在第三个索引(0索引)处找到了它
示例2:找到搜索到的元素并且在搜索范围内有多个实例时
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> arr{ 1, 2, 3, 8, 4, 3 };
int searching_element = 3;
vector<int>::iterator it;
//范围= arr.begin()的起始迭代器
//范围的结束迭代器= arr.end()
it = find(arr.begin(), arr.end(), searching_element);
if (it != arr.end())
cout << searching_element << " //在以下位置: " << it - arr.begin() << endl;
else
cout << searching_element << "not found";
return 0;
}输出:
3 //在以下位置: 2
在上述情况下,我们正在数组中搜索3,该数组在位置索引2上有两个实例,另一个实例在位置5上。由于std :: find()每当找到搜索元素时就停止搜索,因此返回索引2(检查我们如何从返回的迭代器中找到位置。
示例3:在搜索范围内未找到搜索元素时
#include <bits/stdc++.h>
using namespace std;
int main(){
vector<int> arr{ 1, 2, 3, 8, 4, 3 };
int searching_element = 7;
vector<int>::iterator it;
//范围= arr.begin()的起始迭代器
//范围的结束迭代器= arr.end()
it = find(arr.begin(), arr.end(), searching_element);
if (it != arr.end())
cout << searching_element << " //在以下位置: " << it - arr.begin() << endl;
else
cout << searching_element << " not found";
return 0;
}输出:
7 not found
在上述情况下,不存在search元素,这就是为什么它返回arr.end()的原因,这意味着迭代器将到达范围的末尾。