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() 的原因,這意味著迭代器到範圍的末尾。
相關用法
- C++ std::find_end用法及代碼示例
- C++ std::find_first_of()用法及代碼示例
- C++ std::find用法及代碼示例
- C++ std::find_first_of用法及代碼示例
- C++ std::fill()用法及代碼示例
- C++ std::fill_n()用法及代碼示例
- C++ std::forward_list::sort()用法及代碼示例
- C++ std::front_inserter用法及代碼示例
- C++ std::fstream::close()用法及代碼示例
- C++ std::for_each()用法及代碼示例
- C++ std::max()用法及代碼示例
- C++ std::string::push_back()用法及代碼示例
- C++ std::less_equal用法及代碼示例
- C++ std::is_member_object_pointer模板用法及代碼示例
- C++ std::copy_n()用法及代碼示例
- C++ std::string::insert()用法及代碼示例
- C++ std::is_sorted_until用法及代碼示例
- C++ std::iota用法及代碼示例
- C++ std::numeric_limits::digits用法及代碼示例
- C++ std::string::data()用法及代碼示例
注:本文由純淨天空篩選整理自 std::find() with examples in C++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。