仿函数(Functors) 仿函数(functor),就是使一个类的使用看上去象一个函数.其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了. 例如我们定义一个类: class X{ public: return-value operator()(arguments) const; ... }; 然后就可以把这个类别的对象当做函数调用 X fo; ... fo(arg1,arg2) //等价于fo.operator()(arg1,arg2); 显然,这种定…
简单来将,仿函数(functor)就是一个重载了"()"运算符的struct或class,利用对象支持operator()的特性,来达到模拟函数调用效果的技术. 我们平时对一个集合类遍历的时候,例如vector,是这样做的: for(vector<int>::const_iterator iter = ivec.begin(); iter != ivec.end(); ++iter) { //do your whatever you want here } 例如下面的代码:…
layout: post title: 侯捷STL学习(十一) date: 2017-07-24 tag: 侯捷STL --- 第三讲 标准库内核分析-算法 标准库算法形式 iterator分类 不同容器iterator类型不同 测试iterator类型 #include <iostream> // std::cout #include <iterator> // std::iterator_traits #include <typeinfo> // typeid na…
一:仿函数functor介绍 尽管函数指针被广泛用于实现函数回调,但C++还提供了一个重要的实现回调函数的方法,那就是函数对象. functor,翻译成函数对象,伪函数,算符,是重载了“()”操作符的普通类对象.从语法上讲,它与普通函数行为类似. 实际上仿函数对象仅仅占用1字节,因为内部没有数据成员,仅仅是一个重载的方法而已.实际上可以通过传递函数指针实现类似的功能,但是为了和STL内部配合使用,他提供了仿函数的特性. 之前使用的greater<>与less<>就是仿函数对象. 二…
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} 严格来讲, C 和 C++ 都不支持将函数作为参数,真正作为…
STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合,这些"容器"有list, vector,set,map等,STL也是算法和其它一些组件的集合.这里的"容器"和算法的集合指的是世界上很多聪明人很多年的杰作.是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的:一开始STL选…
STL就是Standard Template Library,标准模板库.这可能是一个历史上最令人兴奋的工具的最无聊的术语.从根本上说,STL是一些"容器"的集合.这些"容器"有list, vector,set,map等.STL也是算法和其它一些组件的集合. 这里的"容器"和算法的集合指的是世界上非常多聪明人非常多年的杰作. 是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发.它是与C++差点儿同一时候開始开发的:…
对于程序员来说,数据结构是必修的一门课.从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来.幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性.不过,等你开始应用计算机语言来工作的时候,你会发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟的算法,而且会一次又一次陷入一些由于自己疏忽而产生的bug中.这时,你想找一种工具,已经帮你实现这些功能,你想怎么用就怎么用,同时不影响性能.你需要…
谓词与函数对象 谓词 predicate C++ 标准定义谓词如下: The Predicate parameter is used whenever an algorithm expects a function object that when applied to the result of dereferencing the corresponding iterator returns a value testable as true. In other words, if an alg…
主要是需要某种特殊的东西来代表一整组操作 代表一整组操作的当然是函数,过去通过函数指针实现 所以STL算法的特殊版本所接受的所谓条件或策略或一整组操作都以仿函数的形式呈现 #include <iostream> /*! * 所谓仿函数(functor)就是使用起来像函数一样的东西, * 如果你针对某个class进行operator()重载,它就成为一个仿函数. * 可配接的仿函数?? */ template<class T> struct plus { T operator()(c…
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#2e3436; color:#fefffe; } p {font-size: 15px} li {font-size: 15px} Table of Contents Make Predicate pure Function Make Funct…
Effective STL 学习笔记 32 ~ 33 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} Table of Contents 记得 Remove 后要 Erase remove, container, pointer 1 记得 Remo…
Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Item 19: 相等 (Equality) 与等价 (Equivalence) 2. Item 20: Specify Comparison Type for Associative containers of pointers 1 Item 19: 相等…
STL组件 若干精心勾画的组件共同合作,构筑起STL的基础.这些组件最关键的是容器.迭代器和算法. 下图演示了STL组件之间的合作 容器(Containers) 容器类别(简称容器)用来管理一组元素.为了适应不同需求,STL提供了不同类型的容器. 总的来说,容器可分为两类: 1.序列式容器Sequence containers,此乃可序群集,其中每个元素均有固定位置(取决于插入时机和地点,和元素值无关). STL提供三个定义好的序列式容器:vector.deque和list. 2.关联式容器As…
STL的概念 源地址  https://www.ev0l.art/index.php/archives/15/ <li> Iterator (迭代器)<li> Container (容器) array<li> Alogrithm (算法)<li> Adapters (配接器) 用来实现容器之间的转接 面向过程-->面向对象->基于对象->泛型 代码 #include <iostream> #include <vector&…
标准模板库(STL)学习探究之stack queue priority_queue list map/multimap dequeue string…
标准模板库(STL)学习探究之vector容器  C++ Vectors vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据.为了可以使用vector,必须在你的头文件中包含下面的代码:#include <vector>构造函数. Vectors 包含着一系列连续存储的元素,其行为和数组类…
C++仿函数(functor)详解 所谓的仿函数(functor),是通过重载()运算符模拟函数形为的类. 因此,这里需要明确两点: 1 仿函数不是函数,它是个类: 2 仿函数重载了()运算符,使得它的对你可以像函数那样子调用(代码的形式好像是在调用 函数). 看下面的实例: #include <iostream> using namespace std; const int CMP_LES = -1; const int CMP_EQU = 0; const int CMP_BIG = 1;…
仿函数(functor),就是使一个类或类模板的使用看上去象一个函数.其实现就是类或类模板中对operator()进行重载,这个类或类模板就有了类似函数的行为.仿函数是智能型函数就好比智能指针的行为像指针,其就可看作是一个指针.但是智能指针是定义的一个类对象,所以在具备指针功能的同时也有其他的能力.仿函数的能力也可以超越operator().因为仿函数可以拥有成员函数和成员变量,这意味着仿函数拥有状态.另一个好处是可以在执行期初始化它们. 预定义的仿函数 算术类 加法:plus<T>:减法:m…
点击查看Evernote原文. #@author: gr #@date: 2014-08-11 #@email: forgerui@gmail.com vector的相关问题.<stl学习>将按内容进行整理,不再把所有内容放到一个文件中. ###stl学习 |--迭代器 |--类属算法 |--容器 |--vector |--deque |--list |--set |--map |--函数对象 |--适配器 |--分配器 一.Contents 1. 强大的迭代器 因为vector的迭代器是随机…
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的关联容器. ###stl学习 |--迭代器 |--类属算法 |--容器 |--vector |--deque |--list |--set |--map |--函数对象 |--适配器 |--分配器 一.Contents 1. why关联容器 序列容器以线性排列方式保存数据项,并且各数据项保持了它们在插入时的相对位置,关联容器则摒弃了这种…
点击查看Evernote原文. #@author: gr #@date: 2014-08-23 #@email: forgerui@gmail.com STL中的迭代器. ###stl学习 |--迭代器 |--类属算法 |--容器 |--vector |--deque |--list |--set |--map |--函数对象 |--适配器 |--分配器 一.Contents 1. 输入迭代器 InputIterator要求: 可以++ 可以== 可以cout<<*it;取值 可以看出,输入迭…
点击查看Evernote原文. #@author: gr #@date: 2014-08-13 #@email: forgerui@gmail.com 在stl中,函数对象被大量地使用,用以提高代码的通用性及效率.stl也提供了一些常用的函数对象类型. ###stl学习 |--迭代器 |--类属算法 |--容器 |--vector |--deque |--list |--set |--map |--函数对象 |--适配器 |--分配器 一.Contents 1. 所谓函数对象 函数对象是行为类似…
点击查看Evernote原文. #@author: gr #@date: 2014-08-24 #@email: forgerui@gmail.com STL中的适配器. ###stl学习 |--迭代器 |--类属算法 |--容器 |--vector |--deque |--list |--set |--map |--函数对象 |--适配器 |--分配器 一.Contents 适配器概述: 适配器作用是改变其他组件的接口.它们是以模板类的形式定义的,并且以另一种组件的类型作为参数.STL提供了3…
本文仅介绍了如何使用它们常用的方法. vector 1.可随机访问,可在尾部插入元素:2.内存自动管理:3.头文件#include <vector> 1.创建vector对象 一维: (1) vector<int>v1; (2) vector<int>v2(10);//10个元素,初始为0 (3) vector<int>v3(10,4);//10个元素,初始为4 (4) vector<int>v4(v3); (5) vector<int&g…
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} 有些个算法对有序的和无序的数据都能应用,但多数情况下,他们在输入数据有序时才最有用. 下列算法要求输入数据必须有序…
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; } pre.src { background-color:#f8f4d7 } p {font-size: 15px} li {font-size: 15px} Table of Contents partial_sort nth_element stability partition 总结 1 parti…
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: monospace; } p {font-size: 15px} li {font-size: 14px} Table of Contents 1. 容器区间与算法 2. back_inserter 3. front_inserter 4. inserter 5. inserter & reserve…
Effective STL 学习笔记 Item 26: Prefer Iterator to reverse_iterator and const_rever_itertor */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. Iterator 的类型 2. 迭代器之间的转换 3. Iterator is Special 4. 总结: 1 Iterator 的类型…
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monospace; } Table of Contents 1. 避免 \(set \& multiset\) 在原位改变 Key 2. Consider replacing associative containers with sorted vectors 3. Choose carefully betw…