Skip to content

查找函数

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

Released under the MIT License.