當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C++ std::find()用法及代碼示例


find() 作為 STL 函數

find() 是一個 STL 函數,它位於 <algorithm> 頭文件下,它返回一個迭代器,指向範圍內搜索元素的第一次出現。

用法:

InputIterator find(
    InputIterator first, 
    InputIterator last, 
    const T& val);

其中,

  • InputIterator first- 搜索範圍開始的迭代器
  • InputIterator last- 到搜索範圍結束的迭代器
  • const T& val- 要搜索的數據類型 T 的值

什麽是輸入迭代器?
迭代器到我們找到搜索元素的範圍的第一個位置。如果未找到搜索元素,則將迭代器返回到末尾

返回類型: 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;
    //starting iterator of range= arr.begin()
    //end iterator of range =arr.end()

    it = find(arr.begin(), arr.end(), searching_element);
    if (it != arr.end())
        cout << searching_element << " is at position:" << it - arr.begin() << endl;
    else
        cout << searching_element << "not found";

    return 0;
}

輸出:

8 is at position:3

在上麵的程序中,我們檢查了搜索元素,發現它在3rd索引(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;
    //starting iterator of range= arr.begin()
    //end iterator of range =arr.end()

    it = find(arr.begin(), arr.end(), searching_element);
    if (it != arr.end())
        cout << searching_element << " is at position:" << it - arr.begin() << endl;
    else
        cout << searching_element << "not found";

    return 0;
}

輸出:

3 is at position: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;
    //starting iterator of range= arr.begin()
    //end iterator of range =arr.end()
 
    it = find(arr.begin(), arr.end(), searching_element);
    if (it != arr.end())
        cout << searching_element << " is at position:" << it - arr.begin() << endl;
    else
        cout << searching_element << " not found";

    return 0;
}

輸出:

7 not found

在上述情況下,搜索元素不存在,這就是它返回 arr.end() 的原因,這意味著迭代器到範圍的末尾。



相關用法


注:本文由純淨天空篩選整理自 std::find() with examples in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。