std :: find()与C ++中的示例

find()作为STL函数

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()的原因,这意味着迭代器将到达范围的末尾。