STL算法设计理念 - 二元函数,二元谓词以及在set中的应用
demo 二元函数对象
#include <iostream> #include <cstdio> #include <vector> #include <algorithm> using namespace std; template <typename T> class SumVector { public: T operator()(T t1, T t2) // 二元函数对象 { return t1 + t2; } protected: private: }; void play01() { vector<int> v1, v2, v3; v1.push_back(1); v1.push_back(3); v1.push_back(5); v2.push_back(2); v2.push_back(4); v2.push_back(6); v3.resize(10); transform(v1.begin(), v1.end(), v2.begin(), v3.begin(), SumVector<int>()); /* transform函数原型 template<class _InIt1, class _InIt2, class _OutIt, class _Fn2> inline _OutIt transform(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _OutIt _Dest, _Fn2 _Func) { // transform [_First1, _Last1) and [_First2, ...) with _Func _DEBUG_RANGE(_First1, _Last1); _DEBUG_POINTER(_Dest); _DEBUG_POINTER(_Func); if (_First1 != _Last1) return (_Transform2(_Unchecked(_First1), _Unchecked(_Last1), _First2, _Dest, _Func, _Is_checked(_Dest))); return (_Dest); } */ // transform把运算结果迭代器的开始位置返回出来 for (vector<int>::iterator it = v3.begin(); it != v3.end(); ++it) { cout << *it << ' '; } cout << endl; // 3 7 11 0 0 0 0 0 0 0 } int main() { play01(); return 0; }
demo 二元谓词
#include <iostream> #include <cstdio> #include <vector> #include <algorithm> #include <ctime> using namespace std; void printVector(vector<int> &v) { for (vector<int>::iterator it = v.begin(); it != v.end(); ++it) { cout << *it << ' '; } cout << endl; } void FuncShowElemt2(const int &t) { cout << t << ' '; } // 二元谓词 bool myCompare(const int &a, const int &b) { return a < b; } void play01() { vector<int> v(10); srand(time(0)); for (int i = 0; i < 10; i++) { int tmp = rand() % 100; v[i] = tmp; } printVector(v); // 90 19 94 50 90 90 24 50 30 74 for_each(v.begin(), v.end(), FuncShowElemt2); cout << endl; // 90 19 94 50 90 90 24 50 30 74 sort(v.begin(), v.end(), myCompare); for_each(v.begin(), v.end(), FuncShowElemt2); cout << endl; // 0 8 14 23 32 33 44 45 63 80 } int main() { play01(); return 0; }
demo 二元谓词在set中的应用
#include <iostream> #include <cstdio> #include <set> #include <algorithm> #include <string> using namespace std; struct CompareNoCase { bool operator()(const string &str1, const string &str2) { string tmpstr1; tmpstr1.resize(str1.size()); transform(str1.begin(), str1.end(), tmpstr1.begin(), tolower); string tmpstr2; tmpstr2.resize(str2.size()); transform(str2.begin(), str2.end(), tmpstr2.begin(), tolower); return tmpstr1 < tmpstr2; } }; void play01() { set<string> set1; set1.insert("lucifer"); set1.insert("zhang"); set1.insert("yaoqi"); set<string>::iterator it1 = set1.find("LUcifer"); // find函数默认区分大小写 if (it1 == set1.end()) { cout << "find fail\n"; } else { cout << "find success\n"; } // find fail set<string, CompareNoCase> set2; set2.insert("lucifer"); set2.insert("zhang"); set2.insert("yaoqi"); set<string, CompareNoCase>::iterator it2 = set2.find("LUcifer"); // find函数默认区分大小写 if (it2 == set2.end()) { cout << "find fail\n"; } else { cout << "find success\n"; } // find success } int main() { play01(); return 0; }
STL算法设计理念 - 二元函数,二元谓词以及在set中的应用的更多相关文章
- STL算法设计理念 - 函数适配器
1)函数适配器的理论知识 2)常用函数函数适配器 标准库提供一组函数适配器,用来特殊化或者扩展一元和二元函数对象.常用适配器是: 1.绑定器(binder): binder通过把二元函数对象的一个实参 ...
- STL算法设计理念 - 谓词,一元谓词demo
谓词: 一元函数对象:函数参数1个: 二元函数对象:函数参数2个: 一元谓词 函数参数1个,函数返回值是bool类型,可以作为一个判断式 谓词可以使一个仿函数,也可以是一个回调函数. demo 一元谓 ...
- STL算法设计理念 - 函数对象和函数对象当参数和返回值
函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...
- STL算法设计理念 - 函数对象和函数对象当參数和返回值
函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)&q ...
- STL算法设计理念 - 预定义函数对象
预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象 1)使用预定义函数对象: #include <iostream> #include <cstdio> #i ...
- C++ STL算法系列1---count函数
一.count函数 algorithm头文件定义了一个count的函数,其功能类似于find.这个函数使用一对迭代器和一个值做参数,返回这个值出现次数的统计结果. 编写程序读取一系列int型数据,并将 ...
- C++ STL算法系列6---copy函数
现在我们来看看变易算法.所谓变易算法(Mutating algorithms)就是一组能够修改容器元素数据的模板函数,可进行序列数据的复制,变换等. 我们现在来看看第一个变易算法:元素复制算法copy ...
- 【转】三十分钟学会STL算法
转载自: http://net.pku.edu.cn/~yhf/UsingSTL.htm 这是本小人书.原名是<using stl>,不知道是谁写的.不过我倒觉得很有趣,所以化了两个晚上把 ...
- C++进阶 STL(2) 第二天 一元/二元函数对象、一元/二元谓词、stack容器、queue容器、list容器(双向链表)、set容器、对组、map容器
01 上次课程回顾 昨天讲了三个容器 string string是对char*进行的封装 vector 单口容器 动态数组 deque(双端队列) 函数对象/谓词: 一元函数对象: for_each ...
随机推荐
- Objective-C的继承与组合
Objective-C的继承与组合 Objective-C与Java继承上的区别 区别 Objective-C Java 成员变量 Objective-C继承不允许子类和父类拥有相同名称的成员变量 J ...
- shiro架构
1 shiro介绍 1.1 什么是shiro 分享牛系列,分享牛专栏,分享牛.shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会 ...
- Scala:数组
http://blog.csdn.net/pipisorry/article/details/52902432 ) 或var z = new Array[String](3) 以上语法中,z 声明一个 ...
- Retrofit2.0+RxJava+Dragger2实现不一样的Android网络架构搭建
Tamic :csdn http://blog.csdn.net/sk719887916 众所周知,手机APP的核心就在于调用后台接口,展示相关信息,方便我们在手机上就能和外界交互.所以APP中网络框 ...
- 物料REVISION控制
--新增 INV_ITEM_REVISION_PUB.Create_Item_Revision ( p_api_version IN NUMBER , p_init_msg_list IN VARCH ...
- 深入浅出如何解析xml文件---上篇
xml小伙伴们并不陌生,xml是可扩展标记语言,标准通用标记语言语言的子集,是一种用来标记电子文件使其具有结构性的标记语言.我们知道xml可以用dom与sax等方法进行解析,但是xml为什么要解析呢? ...
- T-SQL动态查询(1)——简介
起因: 由于最近工作需要及过去一直的疑问,所以决定着手研究一下动态SQL.由于离开一线开发有点年头了,很多技巧性的东西没有过多研究,作为DBA和<SQL Server性能优化与管理的艺术> ...
- Java中Excel导入功能实现、excel导入公共方法_POI -
这是一个思路希望能帮助到大家:如果大家有更好的解决方法希望分享出来 公司导入是这样做的 每个到导入的地方 @Override public List<DataImportMessage> ...
- UNIX网络编程——Socket/TCP粘包、多包和少包, 断包
为什么TCP 会粘包 前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个数据包不完整.为什么会这样吗,我们用mina这样通信框架,还会出现这种问题? TCP(transport cont ...
- 对 jiffies 溢出、回绕及 time_after 宏的理解
原文如下: 关于jiffies变量: 全局变量jiffies用来记录自启动以来产生的节拍的总数.系统启动时会将该变量初始化为0,此后,每当时钟中断产生时就会增加该变量的值.jiffies和另外 ...