1. 定义

一个函数适配器,接受一个函数调用,增加或更改参数传递给另外一个函数调用。
比如 auto newCallable=bind(callable, arg_list);

newCallable本身是一个可调用对象,当我们调用newCallable函数时, newCallable会调用callable函数。
arg_list是callable的参数,是逗号分隔的多个参数列表,形如_n的名字,_1是newCallable的第一个参数, _2为第二个参数,依次类推。

  • 标准库bind函数 functional.h
  • _n参数在命名空间placeholders中,需要如下声明:
using namespace std::placeholders::_1;

eg.

using namespace std::placeholders;
bool check_size(const string &s, string::size_type sz)
{return s.size() >= sz;
}auto check6 = bind(check_size, _1, 6);
string s = "hello";
bool b1 = check6(s); <=> check_size(s, 6);

eg2.

auto g = bind(f, a, b, _2, c, _1);
g(_1, _2) => f(a, b, _2, c, _1);
g(X, Y) => f(a, b, Y, c, X);

2. bind参数不能拷贝

2.1 eg. 不能拷贝ostream

ostream &print(ostream &os,const string &s,char c)
{ return os<<s<<c;}for_each(word.begin(),word.end(),bind(print,os,_1, ''))//error

2.2 可以使用ref函数。

函数ref返回一个对象,包含给定引用,此对象是可以拷贝的。

  • 标准库中还有一个cref函数,生成一个保存const引用的类。
  • 与bind一样,函数ref和cref也定义在头文件functional中。
for_each(words.begin(), words.end(), bind(printf, ref(os), _1, ' '));

C++ Primer 5th笔记(10)chapter10 泛型算法 :bind相关推荐

  1. C++ Primer 学习笔记 第十章 泛型算法

    C++ Primer 学习笔记 第十章 泛型算法 336 find函数 #include <iostream> #include <vector> #include <s ...

  2. C++ Primer 5th笔记(10)chapter10 泛型算法 :泛型算法结构

    名称 定义 输入迭代器 只读,不写:单遍扫描,只能递增 输出迭代器 只写,不读:单遍扫描,只能递增 前向迭代器 可读写,多遍扫描,只能递增 双向迭代器 可读写,多遍扫描,可递增递减 随机访问迭代器 可 ...

  3. C++ Primer 5th笔记(10)chapter10 泛型算法 :迭代器

    迭代器类别 名称 定义 插入迭代器 这些迭代器被绑定到一个容器上,可用来向容器插入元素 流迭代器 这些迭代器被绑定到输入或输出流上,可用来遍历所有关联的IO流 反向迭代器 这些迭代器向后而不是向前移动 ...

  4. C++primer第十章 泛型算法 10.4 再探迭代器 10.5 泛型算法结构

    除了为每个容器定义的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器.这些迭代器包括以下几种. 插入迭代器(insert iterator):这些迭代器被绑定到一个容器上,可用来向容 ...

  5. C++ primer 第10章 泛型算法

    文章目录 概述 find count 初识泛型算法 只读算法 只读算法accumulate 只读算法equal 写容器元素的算法 算法fill 算法fill_n back_inserter 算法cop ...

  6. C++ Primer 5th笔记(chap 14 重载运算和类型转换)函数调用运算符

    1. 定义 如果类定义了调用运算符(重载了函数调用运算符),则该类的对象被称作函数对象(function object),可以像使用函数一样使用该类的对象, eg. struct absInt{int ...

  7. C++ Primer 5th笔记(10)chapter10 泛型算法 :write

    1. fill: 对给定区间全部赋予某值(algorithm.h) 将指定范围内的每个元素都设定为给定的值.如果输入范围有效,则可以安全写入.这个算法只会对输入范围内已存在的元素进行写入操作. tem ...

  8. C++ Primer 5th笔记(10)chapter10 泛型算法 : read

    标准库提供一组不依赖特定的容器类型的共性算法 指定迭代器范围, eg. [begin, end)这种左闭包 3种类型: 只读.写.sort 1. find 查询 template<class I ...

  9. C++ Primer 5th笔记(10)chapter10 泛型算法 :谓词

    1. 定义 谓词(predicate)是一个可调用的表达式,返回结果是一个能用作条件的值. 用于一个对象或一个表达式,如果可以对其使用调用运算符,则称为可调用的: 可调用的对象有:函数.函数指针.重载 ...

最新文章

  1. perfmon 端口修改_Jmeter 5.3 服务器资源监控插件 PerfMon 使用介绍
  2. (转载)hadoop(13) 添加或删除datanode节点
  3. 那些喜欢诉苦的人,他们大概会一直苦下去
  4. JavaScript——易班优课YOOC课群在线测试答案隐藏解决方案
  5. LeetCode算法入门- Search Insert Position -day19
  6. 自动采集壁纸的微信小程序
  7. 小程序引入的echarts过大如何解决_智慧虎超:为服装行业带来3倍收益?小程序如何解决销售难题?...
  8. nasm纠正性训练指南pdf_PDF转word,一键转换?没有这么简单
  9. python新手难点_汇总初学python时的28个操作难点(新手必看篇)
  10. php接口防止app重复提交,AOP防止接口重复提交
  11. jsch 长连接_广濑连接器DF13
  12. Ubuntu Kvm USB重定向问题解决
  13. 模拟退火算法(Python)
  14. java 在线画布_使用canvas制作在线画板
  15. 美国电影超短200句(看英文原版电影很有用的!)(转)
  16. OpenGL递归细分四面体法绘制球体
  17. 深入理解JVM的内存结构及GC机制
  18. ctfshow (ssrf学习和实践)
  19. 消防设施操作员考试真题、模拟练习题库(7)
  20. 不宜猥琐惊世人 猥琐哥横空出世

热门文章

  1. 数据库_第一第二第三范式讲解(通俗易懂)
  2. one or more of the ports are invalid. Open the server editor and correct the invalid ports
  3. org.hibernate.NonUniqueObjectException 异常处理
  4. 计算机英语应用研究,计算机英语辅助学习系统的研究与应用-软件工程专业论文.docx...
  5. python的窗口处理模块_Python tkinter模块弹出窗口及传值回到主窗口操作详解
  6. 数据中心制冷基本原则及节能方案
  7. string替换_GEE数据类型—String,Number
  8. ios开发ocr识别_车牌识别技术
  9. TF之LSTM:利用LSTM算法对Boston(波士顿房价)数据集【13+1,506】进行回归预测(房价预测)
  10. ML之LoRSGD:基于LoR(逻辑回归)、SGD梯度下降算法对乳腺癌肿瘤(10+1)进行二分类预测(良/恶性)