时刻提醒自己

Note: vector的释放

0.头文件

#include <algorithm>

1.区别

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

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

2.原型

2.1 find 原型

template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );
(C++20 前) template< class InputIt, class T >
constexpr InputIt find( InputIt first, InputIt last, const T& value );
(C++20 起) template< class ExecutionPolicy, class ForwardIt, class T >
ForwardIt find( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, const T& value );

2.2 find_if 原型


template< class InputIt, class UnaryPredicate >
InputIt find_if( InputIt first, InputIt last,
UnaryPredicate p ); (C++20 前) template< class InputIt, class UnaryPredicate >
constexpr InputIt find_if( InputIt first, InputIt last, UnaryPredicate p ); (C++20 起) template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate >
ForwardIt find_if( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
UnaryPredicate p );

2.3 find_if_not 原型

template< class InputIt, class UnaryPredicate >
InputIt find_if_not( InputIt first, InputIt last,
UnaryPredicate q ); (C++11 起)
(C++20 前) template< class InputIt, class UnaryPredicate >
constexpr InputIt find_if_not( InputIt first, InputIt last,
UnaryPredicate q ); (C++20 起) template< class ExecutionPolicy, class ForwardIt, class UnaryPredicate >
ForwardIt find_if_not( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last,
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.异常

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

5.find用法

5.1 代码

// 分数
std::vector<int> score{ 10, 20, 30, 40 }; // 待查找key
int find_key_10 = 10;
// 找一个存在于数组中的元素
auto ret_val_1 = std::find(score.begin(), score.end(), find_key_10); if (score.end() != ret_val_1)
std::cout << "找到了 10 了\n\n";
else
std::cout << "没有找到 10\n\n"; // 找一个不在数组中的元素
int find_key_50 = 50;
auto ret_val_2 = std::find(score.begin(), score.end(), find_key_50); if (score.end() != ret_val_2)
std::cout << "找到了 50 了\n\n";
else
std::cout << "没有找到 50\n\n";

5.2 输出

6.find_if 用法

6.1 代码

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

6.2 输出

7.find_if_not 用法

7.1 代码

// 分数
std::vector<int> score{ 10, 20, 30, 40 }; // 找首个出现的,且不大于30的元素
auto it = std::find_if_not(score.begin(), score.end(), [](const int &item) {return 30 < item; }); if (score.end() != it)
std::cout << "找到了首个不大于30的元素: " << *it << std::endl;
else
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. Admixture的监督分群(Supervised analysis)

    目录 说明 实战 说明 Admixture通过EM算法一般用于指定亚群分类:或者在不知材料群体结构背景下,通过迭代交叉验证获得error值,取最小error对应的K值为推荐亚群数目.如果我们预先已知群 ...

  2. KEGG通路图应该怎么看(转载)

    转载:http://www.omicshare.com/forum/thread-107-1-3219.html (出处: OmicShare Forum) 不管是RNA-seq的分析数据,还是蛋白组 ...

  3. Shell 打印文件的最后5行

    目录 Shell 打印文件的最后5行 题解-awk 题解-tail Shell 打印文件的最后5行 经常查看日志的时候,会从文件的末尾往前查看,于是请你写一个 bash脚本以输出一个文本文件 nowc ...

  4. linux 实用指令时间日期类

    linux 使用指令时间日期类 data 显示当前日期 基本语法 date 显示当前时间 date+%Y 显示当前年份 date+%m 显示当前月份 date+%d 显示当前是哪一天 date &qu ...

  5. day13 grep命令

    day13 grep命令 linux三剑客之grep命令 介绍 grep(global search regular expression(RE) and print out the line,全面搜 ...

  6. Spark(三)【RDD中的自定义排序】

    在RDD中默认的算子sortBy,sortByKey只能真的值类型数据升序或者降序 现需要对自定义对象进行自定义排序. 一组Person对象 /** * Person 样例类 * @param nam ...

  7. celery开启worker报错django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE o

    其实挺简单的问题,但花了自己一个下午来解决,先是浏览各种博客,无果:没办法,然后去看celery官方文档,无果,近乎绝望,最后仔细看代码,找到问题所在(如下),自学狗这效率...... 下面是自己ta ...

  8. 轻松理解webpack热更新原理

    一.前言 - webpack热更新 Hot Module Replacement,简称HMR,无需完全刷新整个页面的同时,更新模块.HMR的好处,在日常开发工作中体会颇深:节省宝贵的开发时间.提升开发 ...

  9. 【模型推理】量化实现分享二:详解 KL 对称量化算法实现

      欢迎关注我的公众号 [极智视界],回复001获取Google编程规范   O_o   >_<   o_O   O_o   ~_~   o_O   大家好,我是极智视界,本文剖析一下 K ...

  10. SWPUCTF_2019_p1KkHeap(tcache_entry)

    花了半天的时间去理解吃透这道题目,也参考了大佬的wp (1条消息) [pwn]SWPUCTF_2019_p1KkHeap_Nothing-CSDN博客. (1条消息) swpuctf2019 p1Kk ...