1)
在a[N]中数组中:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
signed main(){
int a[5]={4,6,8,4,2};
int target=2;
auto it=find(a,a+5,target);
cout<<"查找结果:";
if(it!=a+5){
cout<<"yes"<<endl;
cout<<"地址:"<<it<<endl;//地址
cout<<"目标值下标:"<<it-a<<endl;//目标值下标
cout<<"具体目标值:"<<*it<<endl;//具体目标值
}
else
cout<<"no"<<endl;
return 0;
}
返回值:如果查找成功,返回其在向量中的位置,可使用此迭代器通过it-a表示下标,*it表示其下标对应的值(方法与lower_bound和upper_bound相似),查不到,则返回。
2)
在vector中:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
signed main(){
int a[5]={4,6,8,4,2};
vector<int> nums(a,a+5);//初始赋值
int target=8;
auto it=find(nums.begin(),nums.end(),target);//vector自身没有有find()函数
cout<<"查找结果:";
if(it!=nums.end())//找到目标值
{
cout<<"yes"<<endl;
cout<<"目标值下标:"<<it-nums.begin()<<endl;//目标值下标
cout<<"具体目标值:"<<*it<<endl;//具体目标值
}
else
cout<<"no"<<endl;
return 0;
}
返回值:如果查找成功,返回其在向量中的位置,可使用此迭代器通过it-nums.begin()表示下标,*it表示其下标对应的值(方法与lower_bound和upper_bound相似),查不到,则返回nums.end()
3)
在map中:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
signed main(){
map<int,int> mp;
int a[7]={4,6,8,4,2,8,4};
for(auto x:a){
mp[x]++;
}
int target=8;
auto it=mp.find(target);//map自带的有find()函数
cout<<"查找结果:";
if(it!=mp.end())//找到目标值
{
cout<<"yes"<<endl;
cout<<"具体目标值:"<<it->first<<endl;//具体目标值
cout<<"目标值出现的次数:"<<it->second<<endl;//目标值出现的次数
}
else{
cout<<"no"<<endl;
}
return 0;
}
返回值:如果查找,它返回一个指向与键target关联的元素的迭代器,可使用此迭代器通过->first或者->second,查不找,返回mp.end():表示末端元素的下一个元素,这个迭代器起一个哨兵的作用,表示已经处理完所有的元素。
4)
在string中:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
signed main(){
string a,b;
cout<<"查找结果:";
if(a.find(b)!=string::npos)//找到目标值
{
cout<<"yes"<<endl;
}
else{
cout<<"no"<<endl;
}
return 0;
}
返回值:如果查找,返回第一个下标,是无符号整型,如果查找不到,就会返回4294967295(string::npos表示-1或4294967295)。
最后:
以上是我对经常刷题会用到的find()函数以及以及各个迭代器返回值解释的总结,以上代码均可运行,仅是我个人的总结,可能会有一些问题。