find()的用法
一、std::find(最常用)
头文件
1 |
原型
1 | template<class InputIt, class T> |
作用
在区间
[first, last)中查找 第一个等于 value 的元素
1️⃣ 在 vector 中查找
1 | vector<int> a = {1, 3, 5, 7}; |
📌 关键点
- 返回的是 迭代器
- 没找到 → 返回
end()
2️⃣ 在数组中查找
1 | int a[] = {10, 20, 30, 40}; |
3️⃣ 在 string(字符层面)中用 std::find
1 | string s = "hello"; |
⚠️ 注意:
这是 algorithm 的 find,不是字符串成员函数。
二、string::find(字符串专用)
头文件
1 |
4️⃣ 查找子串(最常见)
1 | string s = "hello world"; |
📌
- 返回 下标
- 找不到 →
string::npos
5️⃣ 从指定位置开始找
1 | string s = "ababab"; |
6️⃣ 查找字符
1 | string s = "abcde"; |
三、find vs string::find 对比(必会)
| 对比点 | std::find | string::find |
|---|---|---|
| 头文件 | <algorithm> |
<string> |
| 返回值 | 迭代器 | 下标 |
| 适用对象 | 所有容器 | 仅 string |
| 未找到 | end() |
string::npos |
四、常见错误(很重要)
❌ 忘了判断是否找到
1 | auto it = find(v.begin(), v.end(), x); |
✔️ 正确写法
1 | if (it != v.end()) { |
❌ 混淆两个 find
1 | string s = "abc"; |
✔️
1 | s.find('a'); // string::find |
五、时间复杂度(竞赛要知道)
std::find:O(n)(顺序查找)string::find:通常 O(n)
⚠️ 若需要快速查找:
set / map→find()是 O(log n)unordered_map→ 平均 O(1)
六、一句话总结
容器找元素用
std::find,字符串找子串用string::find
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 zhaijiang的小窝!

