stl算法_foreach和transform基本使用,算法比较以及源码追踪
来源:互联网 发布:深圳淘宝开店培训 编辑:程序博客网 时间:2024/06/05 15:25
传智扫地僧课程学习笔记。
直接看老师示例代码,
#include <iostream>using namespace std;#include "string"#include <vector>#include <list>#include "set"#include <algorithm>#include "functional"#include "iterator" //输出流迭代器的头文件void printV(vector<int> &v){for (vector<int>::iterator it=v.begin(); it!=v.end(); it++){cout << *it << " ";}}void printList(list<int> &v){for (list<int>::iterator it=v.begin(); it!=v.end(); it++){cout << *it << " ";}}void showElem(int &n){cout << n << " ";}class CMyShow{public:CMyShow(){num = 0;}void operator()(int &n){num ++;cout << n << " ";}void printNum(){cout << "num:" << num << endl;}protected:private:int num;};void main41_foreach(){vector<int> v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);printV(v1);cout << endl;/*template<class _InIt,class _Fn1> inline_Fn1 for_each(_InIt _First, _InIt _Last, _Fn1 _Func){// perform function for each element_DEBUG_RANGE(_First, _Last);_DEBUG_POINTER(_Func);return (_For_each(_Unchecked(_First), _Unchecked(_Last), _Func));} *///函数对象 回调函数入口地址for_each(v1.begin(), v1.end(), showElem);cout << endl;for_each(v1.begin(), v1.end(), CMyShow());cout << endl; CMyShow mya; CMyShow my1 = for_each(v1.begin(), v1.end(),mya); //给my1初始化 mya.printNum(); //ma1和my1 是两个不同的对象 my1.printNum(); my1 = for_each(v1.begin(), v1.end(),mya); //给my1赋值 my1.printNum();}int increase(int i){return i+100;}void main42_transform(){vector<int> v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);printV(v1);cout << endl;//transform 使用回调函数transform(v1.begin(), v1.end(), v1.begin(), increase ); printV(v1);cout << endl;//transform 使用 预定义的函数对象transform(v1.begin(), v1.end(), v1.begin(), negate<int>() ); printV(v1);cout << endl;//transform 使用 函数适配器 和函数对象list<int> mylist;mylist.resize( v1.size() );transform(v1.begin(), v1.end(), mylist.begin(), bind2nd( multiplies<int>(), 10 ) ); printList(mylist);cout << endl;//transform 也可以把运算结果 直接输出到屏幕transform(v1.begin(), v1.end(), ostream_iterator<int>(cout, " " ), negate<int>() );cout << endl;}//一般情况下:for_each所使用的函数对象,参数是引用,没有返回值//transform所使用的函数对象,参数一般不使用引用,而是还有返回值int showElem2(int n){cout << n << " ";return n;}void main43_transform_pk_foreach(){vector<int> v1;v1.push_back(1);v1.push_back(3);v1.push_back(5);vector<int> v2 = v1;for_each(v1.begin(), v1.end(), showElem);//transform 对 函数对象的要求/*c:\program files\microsoft visual studio 10.0\vc\include\algorithm(1119): 参见对正在编译的函数 模板 实例化“_OutIt std::_Transform1<int*,_OutIt,void(__cdecl *)(int &)>(_InIt,_InIt,_OutIt,_Fn1,std::tr1::true_type)”的引用1> with1> [1> _OutIt=std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>,1> _InIt=int *,1> _Fn1=void (__cdecl *)(int &)1> ]*//*template<class _InIt,class _OutIt,class _Fn1> inline_OutIt _Transform(_InIt _First, _InIt _Last,_OutIt _Dest, _Fn1 _Func){// transform [_First, _Last) with _Funcfor (; _First != _Last; ++_First, ++_Dest)*_Dest = _Func(*_First); //解释了 为什么 要有返回值return (_Dest);}*/transform(v2.begin(), v2.end(), v2.begin(), showElem2);}void main(){//main41_foreach();//main42_transform();// main43_transform_pk_foreach();cout<<"hello..."<<endl;system("pause");return ;}
0 0
- stl算法_foreach和transform基本使用,算法比较以及源码追踪
- STL常用遍历算法for_each和transform的比较
- STL算法 ------- transform() 与 for_each()比较
- STL 算法之transform
- C++STL-算法transform
- C++ STL 算法:transform
- STL算法 ------- transform()
- STL算法(18)-transform()
- C++ STL算法transform
- C++--STL--transform算法
- STL-transform算法
- STL算法(19)——for_each()和transform()的比较
- STL_算法 for_each 和 transform 比较
- STL学习之十四:常用算法 for_each 和 transform以及adjacent_find的示例代码
- STL algorithm算法transform(57)
- STL遍历算法 “for_each ”,“transform”
- STL源码剖析学习之基本算法
- random_shuffle 和transform算法
- htop使用文摘
- 基于域的分解机(FFM)理论介绍及libFFM源码解析
- pyinstaller的库导入和多进程打包问题
- 剑指offer-面试题19-二叉树的镜像
- 微服务的优势与不足
- stl算法_foreach和transform基本使用,算法比较以及源码追踪
- 记一次坑爹的三方sdk问题的编译错误
- Macho文件浏览器---MachOView
- WPF的ScrollViewer鼠标的滚动
- 本地存贮-文件系统
- 使用PullToRefreshListView遇到的坑
- 腾讯学院运营课程第八、九天
- mobile/移动端布局技巧
- Javascript中的逻辑运算符详解