查找函数
find()
,find_if()
,find_if_not
,find_first_of
,find_end
查找函数
TIP
find()
:查找指定值的第一个出现位置。find_if()
:查找满足条件的第一个元素。find_if_not()
:查找不满足条件的第一个元素。find_first_of()
:查找第一个出现在指定范围内的元素。find_end()
:查找最后一个出现在指定范围内的元素。
1. find()
查找指定值的第一个出现位置
cpp
vector<int> arr = {4,5,2,8,3,1};
auto it = find(arr.begin(), arr.end(), 3);
if(it != arr.end()){
cout << "发现值元素:" << *it<<" 位置为" << distance(arr.begin(), it) << endl;
//发现值元素:3 位置为4
} else {
cout << "没有找到元素" << endl;
}
2. find_if()
查找满足条件的第一个元素
cpp
vector<int> arr = {4,5,2,8,3,1};
auto it2 = find_if(arr.begin(), arr.end(), [](int x) { return x > 5; });
if(it2 != arr.end()){
cout << "发现值元素:" << *it2<<" 位置为" << distance(arr.begin(), it2) << endl;
//发现值元素:8 位置为3
} else {
cout << "没有找到元素" << endl;
}
3. find_if_not()
查找不满足条件的第一个元素
cpp
vector<int> arr = {4,5,2,8,3,1};
auto it3 = find_if_not(arr.begin(), arr.end(), [](int x) { return x > 5; });
if(it3 != arr.end()){
cout << "发现值元素:" << *it3<<" 位置为" << distance(arr.begin(), it3) << endl;
//发现值元素:4 位置为0
} else {
cout << "没有找到元素" << endl;
}
4. find_first_of()
查找第一个出现在指定范围内的元素
cpp
vector<int> arr = {4,5,2,8,3,1};
auto it4 = find_first_of(arr.begin(), arr.end(), {2, 3, 4});
if(it4 != arr.end()){
cout << "发现值元素:" << *it4<<" 位置为" << distance(arr.begin(), it4) << endl;
//发现值元素:2 位置为2
} else {
cout << "没有找到元素" << endl;
}
5. find_end()
查找最后一个出现在指定范围内的元素
cpp
vector<int> arr = {4,5,2,8,3,1};
auto it5 = find_end(arr.begin(), arr.end(), {2, 3, 4});
if(it5 != arr.end()){
cout << "发现值元素:" << *it5<<" 位置为" << distance(arr.begin(), it5) << endl;
//发现值元素:2 位置为2
} else {
cout << "没有找到元素" << endl;
}
search()
查找连续子序列
TIP
search()
:查找连续子序列。search_n()
:查找连续n个相同的元素。
1. search()
查找连续子序列
cpp
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8};
vector<int> subarr = {3, 4, 5};
auto it = search(arr.begin(), arr.end(), subarr.begin(), subarr.end());
if(it != arr.end()){
cout << "发现子序列:" << *it<<" 位置为" << distance(arr.begin(), it) << endl;
//发现子序列:3 位置为2
} else {
cout << "没有找到子序列" << endl;
}
2. search_n()
查找连续n个相同的元素
cpp
vector<int> arr1 = {1, 2, 3, 3, 3, 6, 7, 8};
int n = 3;
auto it1 = search_n(arr1.begin(), arr1.end(), n, 3);
if(it1 != arr1.end()){
cout << "发现连续子序列:" << *it1<<" 位置为" << distance(arr1.begin(), it1) << endl;
//发现连续子序列:3 位置为2
} else {
cout << "没有找到连续子序列" << endl;
}
3. 在字符串中查找子串
cpp
string s="abacaba";
string t="aba";
string::iterator it=s.begin();
while((it=search(it,s.end(),t.begin(),t.end()))!=s.end()){
cout<<distance(s.begin(), it)<<endl;
it=it+1;
}
// 第一次出现的下标是0,第二次出现的下标是4