1.find(beg,end,v)
:在[beg,end)区间查找值等于v的元素,找到返回对应的迭代器,否则返回end。
#include<bits/stdc++.h>
using namespace std;
int main(){
int *tp;
int a[4]={3,4,5,17};
vector<int> b={7,8,8,8};
tp=find(a,a+4,22);
cout<<tp-a<<endl; //输出位置
if(tp==a+4) cout<<"can't find"<<endl; //找不到就返回最后一个位置
else cout<<(*tp)<<endl; //输出元素
auto it=find(b.begin(),b.end(),8);
cout<<it-b.begin()<<endl; //返回第一个位置
if(it!=b.end()) cout<<*it<<endl;
else cout<<"can't find"<<endl;
return 0;
}
2.find_first_of(beg,end,beg2,end2 /*,cmp*/) find_end
:在区间[beg,end)和[beg2,end2)找元素匹配的,返回第一个位置的迭代器,默认相同元素,也可以自定义cmp
#include<bits/stdc++.h>
using namespace std;
bool cmp(string x,string y){ //自定义
if(x=="tdd") return true;
else return false;
}
int main(){
vector<string> v1={"ab","cd","ccc","abcdfg","tdd"};
vector<string> v2={"cd","tdd","tttt"};
auto it=v1.begin(); //返回相匹配元素的迭代器
while((it=find_first_of(it,v1.end(), v2.begin(),v2.end()/*,cmp */))!=v1.end()){
cout<<*it<<" ";
it++;
}
return 0;
}
//find_end 与find_first_of 相同不过是返回最后一个
3.search(beg,end,beg2,end2)
:在区间[beg,end)中查找[beg2,end2)子序列,返回第一个迭代器。
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> a={1,2,3,4,7,8,9};
vector<int> b={3,4,7};
auto it=search(a.begin(),a.end(),b.begin(),b.end());
cout<<it-a.begin()<<endl;
//找到b中元素在a中第一次出现的位置,找不到返回end()
return 0;
}
4.search_n(beg,end,n,v)
:在区间[beg,end)查找连续的n个v,返回第一个位置的迭代器。
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> a={1,2,3,7,7,8,9};
auto it=search_n(a.begin(),a.end(),2,7); //查询2个7
cout<<it-a.begin()<<endl;
return 0;
}
5.count(beg,end,v)
:在区间[beg,end)查询等于v的个数,v也可以换成cmp自定义。
#include<bits/stdc++.h>
using namespace std;
bool cmp(int x){
if(x&1) return true;
else return false;
}
int main(){
vector<int> a={1,2,3,1,7,8,1};
cout<<count(a.begin(),a.end(),1)<<endl;
cout<<count_if(a.begin(),a.end(),cmp)<<endl;
return 0;
}
6.lower_bound(beg,end,v) upper_bound(beg,end,v)
:lower_bound返回第一个大于等于v的迭代器,upper_bound返回第一个大于v的迭代器,找不到返回end。
#include<bits/stdc++.h>
using namespace std;
int main() {
int b[5]= {1,2,2,2,5};
vector<int> a(b,b+5);
vector<int>::iterator it1,it2;
int s=lower_bound(b,b+5,2)-b;
int e=upper_bound(b,b+5,7)-b;//找不到就返回最后一个位置
cout<<s<<" "<<e<<endl;
it1=lower_bound(a.begin(),a.end(),2);
cout<<*it1<<endl;//it1是第一个大于或等于2的位置
it2=upper_bound(a.begin() ,a.end(),2);
cout<<*it2<<endl;//it2是第一个大于2的位置
cout<<it2-it1<<endl;
return 0;
}