时刻提醒自己

Note: vector的释放

0.头文件

  1. #include <algorithm>

1.区别

返回范围 [first, last) 中满足特定判别标准的首个元素:

函数 功能
find 搜索等于 value 的元素
find_if 根据指定的查找规则,在指定区域内查找第一个符合该函数要求(使函数返回 true)的元素
find_if_not 如果查找成功,该迭代器指向的是查找到的那个元素;反之,如果查找失败,该迭代器的指向和 last 迭代器相同

2.原型

2.1 find 原型

  1. template< class InputIt, class T >
  2. InputIt find( InputIt first, InputIt last, const T& value );
  3. (C++20 前)
  4. template< class InputIt, class T >
  5. constexpr InputIt find( InputIt first, InputIt last, const T& value );
  6. (C++20 起)
  7. template< class ExecutionPolicy, class ForwardIt, class T >
  8. ForwardIt find( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, const T& value );

2.2 find_if 原型


  1. template< class InputIt, class UnaryPredicate >
  2. InputIt find_if( InputIt first, InputIt last,
  3. UnaryPredicate p ); (C++20 前)
  4. template< class InputIt, class UnaryPredicate >
  5. constexpr InputIt find_if( InputIt first, InputIt last,
  6. UnaryPredicate p ); (C++20 起)
  7. template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate >
  8. ForwardIt find_if( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
  9. UnaryPredicate p );

2.3 find_if_not 原型

  1. template< class InputIt, class UnaryPredicate >
  2. InputIt find_if_not( InputIt first, InputIt last,
  3. UnaryPredicate q ); (C++11 起)
  4. (C++20 前)
  5. template< class InputIt, class UnaryPredicate >
  6. constexpr InputIt find_if_not( InputIt first, InputIt last,
  7. UnaryPredicate q ); (C++20 起)
  8. template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate >
  9. ForwardIt find_if_not( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
  10. UnaryPredicate q );

3.参数

参数 解释
first, last 要检验的元素范围
value 要与元素比较的值
p 若为要求的元素则返回 ​true 的一元谓词。对每个(可为 const 的) VT 类型参数 v ,其中 VT 是 InputIt 的值类型,表达式 p(v) 必须可转换为 bool ,无关乎值类别,而且必须不修改 v 。从而不允许 VT& 类型参数,亦不允许 VT ,除非对 VT 而言移动等价于复制 (C++11 起)。
q 若为要求的元素则返回 ​false 的一元谓词。对每个(可为 const 的) VT 类型参数 v ,其中 VT 是 InputIt 的值类型,表达式 q(v) 必须可转换为 bool ,无关乎值类别,而且必须不修改 v 。从而不允许 VT& 类型参数,亦不允许 VT ,除非对 VT 而言移动等价于复制 (C++11 起)。 ​

4.异常

  1. A. 若作为算法一部分调用的函数的执行抛出异常,且 ExecutionPolicy 为标准策略之一,则调用 std::terminate 。对于任何其他 ExecutionPolicy ,行为是实现定义的。
  2. B. 若算法无法分配内存,则抛出 std::bad_alloc

5.find用法

5.1 代码

  1. // 分数
  2. std::vector<int> score{ 10, 20, 30, 40 };
  3. // 待查找key
  4. int find_key_10 = 10;
  5. // 找一个存在于数组中的元素
  6. auto ret_val_1 = std::find(score.begin(), score.end(), find_key_10);
  7. if (score.end() != ret_val_1)
  8. std::cout << "找到了 10 了\n\n";
  9. else
  10. std::cout << "没有找到 10\n\n";
  11. // 找一个不在数组中的元素
  12. int find_key_50 = 50;
  13. auto ret_val_2 = std::find(score.begin(), score.end(), find_key_50);
  14. if (score.end() != ret_val_2)
  15. std::cout << "找到了 50 了\n\n";
  16. else
  17. std::cout << "没有找到 50\n\n";

5.2 输出

6.find_if 用法

6.1 代码

  1. // 分数
  2. std::vector<int> score{ 10, 20, 30, 40 };
  3. // 找首个出现的,且大于30的元素
  4. auto it = std::find_if(score.begin(), score.end(), [](const int &item) {return 30 < item; });
  5. if (score.end() != it)
  6. std::cout << "找到了大于30的元素: " << *it << std::endl;
  7. else
  8. std::cout << "没有找到大于30的元素\n";

6.2 输出

7.find_if_not 用法

7.1 代码

  1. // 分数
  2. std::vector<int> score{ 10, 20, 30, 40 };
  3. // 找首个出现的,且不大于30的元素
  4. auto it = std::find_if_not(score.begin(), score.end(), [](const int &item) {return 30 < item; });
  5. if (score.end() != it)
  6. std::cout << "找到了首个不大于30的元素: " << *it << std::endl;
  7. else
  8. std::cout << "没有找到不大于30的元素\n";

7.2 输出

c++11之find 和 find_if 和 find_if_not 用法的更多相关文章

  1. 2018年11月10日 input,print,pass 用法,条件语句+字符串

    name=input('请输入用户名')#永远等待用户输入 password=input('请输入密码') print(name) print(password) 变量定义的规则: 变量名只能是 字母 ...

  2. 9.11 Django关于母版语言的灵活用法

    2018-9-11 12:45:38 还是这个连接 : http://www.cnblogs.com/liwenzhou/p/7931828.html 注意: 这节讲的是  母版语言的灵活用法!  可 ...

  3. 07 Mybatis的多表查询1----1对多和多对1---@Results注解用法总结

    1.表与表之间的关系及其举例 表之间的关系有4种:一对多.多对一.一对一.多对多. 举例: (1)用户和订单就是一对多 一个用户可以下多个订单 (2)订单和用户就是多对一 多个订单属于同一个用户 (3 ...

  4. C++11常用特性介绍——for循环新用法

    一.for循环新用法——基于范围的for循环 for(元素类型 元素对象 : 容器对象) { //遍历 } 1)遍历字符串 std::string str = "hello world&qu ...

  5. C++11常用特性介绍——nullptr关键字及用法

    一.nullptr关键字及用法 1)NULL的二义性 void func(int) {} void func(int*) {} 当函数调用func(NULL)时会执行哪个函数呢? 先看C++对NULL ...

  6. csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别

    ODP.NET: 引用: using Oracle.DataAccess; //Oracle g 11.2.0 using Oracle.DataAccess.Client; using Oracle ...

  7. Java 11 新特性介绍

    Java 11 已于 2018 年 9 月 25 日正式发布,之前在Java 10 新特性介绍中介绍过,为了加快的版本迭代.跟进社区反馈,Java 的版本发布周期调整为每六个月一次——即每半年发布一个 ...

  8. SpringMVC(11)表单标签

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...

  9. #include <vector>

    双端队列deque比向量vector更有优势 vector是动态数组,在堆上 vector比array更常用 不需要变长,容量较小,用array 需要变长,容量较大,用vector 1 at() 取出 ...

随机推荐

  1. SSRF的原理和防范

    背景 最近做的安全测评主要是SSRF,发现自己在这一块有挺大知识盲点,抓紧补一下. 1.介绍 SSRF(Server-Side Request Forgery:服务器端请求伪造),是一种攻击者利用服务 ...

  2. 毕业设计之zabbix集合

    lnmp环境请查看https://www.cnblogs.com/betterquan/p/12285956.html 但是!!!注意php的编译: https://www.zabbix.com/do ...

  3. kafka的安装及使用

    前言花絮 今天听了kafka开发成员之一的饶军老师的讲座,讲述了kafka的前生今世.干货的东西倒是没那么容易整理出来,还得刷一遍视频整理,不过两个比较八卦的问题,倒是很容易记住了. Q:为什么kaf ...

  4. Go 性能提升tips--边界检查

    1. 什么是边界检查? 边界检查,英文名 Bounds Check Elimination,简称为 BCE.它是 Go 语言中防止数组.切片越界而导致内存不安全的检查手段.如果检查下标已经越界了,就会 ...

  5. 【leetcode】15. 3 Sum 双指针 压缩搜索空间

    Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i ...

  6. @RequestBody配合@Valid 校验入参参数

    自定义一个Controller import com.example.demo.pojo.User; import org.springframework.web.bind.annotation.Po ...

  7. Linux服务器---drupal

    Drupal Drupal为用户提供各种工具来管理网站,它可以帮助用户入门,建立自己的网站 1.下载drupal软件(https://www.drupal.org/project/drupal/rel ...

  8. html href页面跳转获取参数

    //传递参数 var id = columnData.id; var companyname = encodeURI(columnData.companyname); var linename = e ...

  9. OSGI与Spring结合开发web工程

    简介: 作为一个新的事实上的工业标准,OSGi 已经受到了广泛的关注, 其面向服务(接口)的基本思想和动态模块部署的能力, 是企业级应用长期以来一直追求的目标.Spring 是一个著名的 轻量级 J2 ...

  10. 【Python】【Module】random

    mport random print random.random() print random.randint(1,2) print random.randrange(1,10) 随机数 import ...