# 【程式】C++函式 `std::find()`
## 前言
每次在刷LeetCode常常需要用到find()函式,但每次用每次都不熟悉,已經造訪別人的網站無數次了還是記不起來,所以只好先篇筆記讓自己銘記在心了。
這篇筆記我也只舉我自己最常用的情況,就是**find()搭配STL中的vector容器**
---
## Syntax
要先在標頭檔中加上 **`#include <algorithm>`**
```cpp=
InputIterator find (InputIterator first, InputIterator last, const T& val)
```
find()函式裡面要放的參數是 **(iterator的頭, iterator的尾, 要找到目標)**
然後回傳 => if(找到) return (找到的iterator位址) else return (iterator的尾)
---
## 範例
it是一個迭代器,要得到值的話,必須要用**取值運算子(*)** => `*it`
用另一個函數`std::distance(v.begin(), it)`得到目標的index值
也可以用`it-v.begin()`代替
```cpp=
int main() {
vector<int> v = {23,76,34,9,31,5};
vector<int>::iterator it = std::find(v.begin(), v.end(), 34); // find 34
if (it != v.end()){
cout << "found: " << *it << endl;
cout << "index: " << std::distance(v.begin(), it) << endl;
}
else{
cout << "not found" << endl;
}
return 0;
}
```
如果想要遍歷目標之後所有的值可以用for迴圈
```cpp=
for (auto i = it; i != v.end() ;i++){
cout << *i << " ";
}
```
---
## 統整
1. `#include <algorithm>`
2. `vector<int>::iterator it = std::find(v.begin(), v.end(), target);`
3. `*it` 取值
4. `it-v.begin()`或`std::distance(v.begin(), it)` 取索引值
---
## 參考
1. [Cpp Reference](https://cplusplus.com/reference/algorithm/find/)
2. [C++ std::find 搜尋用法與範例|ShengYu Talk](https://shengyu7697.github.io/std-find/)
###### tags: `程式` `學習` `筆記`