概述

标准库算法 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);

算法是如何工作的

  1. 访问序列中的首元素。
  2. 比较此元素与要查找的值。
  3. 如果此元素与要查找的值匹配,find 返回标识此元素的值。
  4. 否则,find 前进到下一个元素,重复执行步骤 2 和 3。
  5. 如果到达列尾, find 应停止。
  6. 如果 find 到达末尾,返回一个指出元素未找到的值。

只要有一个迭代器可用来访问元素,find 就完全不依赖于容器类型(甚至无须理会保存元素的是不是容器)。

迭代器令算法不依赖于容器,但算法依赖于元素类型的操作

posted @ 2019-12-27 17:29  CodeWithMe  阅读(153)  评论(0)    收藏  举报