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 ...
随机推荐
- 集合框架之Collection接口
Collection 层次结构中的根接口.Collection表示一组对象,这些对象也称为 collection 的元素.一些 collection 允许有重复的元素,而另一些则不允许.一些 coll ...
- iOS常见控件的基本使用
UI相关类继承关系 UIView 常见属性和方法 UIView属性 UIView方法 UIControl 常用控件 UIImageView 图片显示控件android ImageView UISlid ...
- Ubuntu15.10 安装OpenCV3.1
wget https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/3.1.0/opencv-3.1.0.zip/downloa ...
- reactor线程阻塞引起故障
大致线程模型: jstack打印JVM堆栈,可以看到reactor线程阻塞了,导致它对应的前端连接无法使用.阻塞在了oracle驱动rollback动作,这里其实是因为oracle驱动为了保证串行请求 ...
- C++三目运算符的增强
<p>// 在C语言中表达式的结果放在寄存器中 // 在C语言中,表达式的返回值是变量的值 // 在C++中,表达式返回的是变量的本身</p><pre name=&quo ...
- UI设计--大象无形
UI设计,大象无形 UI设计,如同优雅的艺术品一样,优秀的UI设计也可以大象无形,大象无形的意思是有意化无意.大象化无形!就是不要显刻意,不要过分的主张,要兼容百态.无形态无框架才能容纳一切形体! ...
- SimpleAdapter和Baseadapter填充listActivity-android学习之旅()
简介 SimpleAdapter的功能是能够为AbsListView提供复杂的数据,需要构造ListView 代码示例 package peng.liu.testview; import androi ...
- Java-IO之BufferedWriter(字符缓冲输出流)
BufferedWriter是字符缓冲输出流,继承于Writer,作用是为其他字符输出流添加一些缓冲功能. BufferedWriter主要的函数列表: BufferedWriter(Writer o ...
- 03 Button 按钮
按钮 父类: TextView >概念:可以被按,点击 并且执行一个动作 >属性: 在按钮内部的上下左右设置图片: androi ...
- SDK目录结构
android sdk里的各目录作用 AVD Manager.exe:虚拟机管理工具,用于建立和管理虚拟机. SDK Manager.exe:sdk管理工具,用于管理.下载sdk.sdk工具,能及扩展 ...