概述
标准库算法 find:
int val = 42;//查找的值
//如果在vec中找到想要的元素,则返回结果指向它,否则返回结果为vec.cend()
auto result = find(vec.cbegin(),vec.cend(),val);
//报告结果
cout << "The value " << val
<< (result == vec.cend()
? " is not present" : " is present") << endl;
- find 将范围中每个元素与给定值进行比较,返回指向第一个等于给定值的元素的迭代器。
- 范围中无匹配元素,返回第二个参数来表示搜索失败。
可以通过比较返回值和第二个参数来判断搜索是否成功。find操作的是迭代器,可以用同样的find在任何容器中查找值。
find 在一个 string 的 list 中查找一个给定值:
string val = "a value";//查找的值
//在list中查找string元素
auto result = find(lst.cbegin(),lst.cend(),val);
find 在数组中查找值:
int ia[] = {27,210,12,47,109,83};
int val = 83;
int* result = find(begin(ia),end(ia),val);
在序列的子范围中查找,只需将子范围首元素和尾元素之后位置的迭代器(指针)传递给 find:
//从ia[1]开始,直至(但不包含)ia[4]的范围内查找元素
auto result = find(ia+1,ia+4,val);
算法是如何工作的
- 访问序列中的首元素。
- 比较此元素与要查找的值。
- 如果此元素与要查找的值匹配,find 返回标识此元素的值。
- 否则,find 前进到下一个元素,重复执行步骤 2 和 3。
- 如果到达列尾, find 应停止。
- 如果 find 到达末尾,返回一个指出元素未找到的值。
只要有一个迭代器可用来访问元素,find 就完全不依赖于容器类型(甚至无须理会保存元素的是不是容器)。

浙公网安备 33010602011771号