仿函数
2015-07-19 18:59
435 查看
template<typename T > struct Compare{ bool operator()(const T & ele1,const T &ele2){ return ele1 < ele2; } };
1 . 仿函数可用于排序准则
例:
// Settest.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <set>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
template<typename T > struct Compare{ bool operator()(const T & ele1,const T &ele2){ return ele1 < ele2; } };
int main(int argc, char* argv[])
{
typedef multiset< int ,Compare<int> > Set; //容器插入时的比较准则
Set iset;
iset.insert(2);
iset.insert(1);
iset.insert(3);
iset.insert(3);
ostream_iterator<int> out(cout," ");
copy(iset.begin(),iset.end(),out);
return 0;
}
2 . 拥有内部状态的仿函数
template<typename T > struct IntSequence{ IntSequence(int i):m_i(i){} int operator()(){ return m_i++; } int m_i; }; int main(int argc, char* argv[]) { list<int> ilist; generate_n(back_inserter(ilist),5,IntSequence<int>(1)); ostream_iterator<int> out(cout," "); copy(ilist.begin(),ilist.end(),out); return 0; }
这个有如下几个地方注意
1.generate_n
template<class OutputIterator,class Size,class Generator> OutputIterator generate_n(OutputIterator first,Size n,Generator gen){ for( ; n> 0; --n,++first){ *first = gen(); } return first; }
在内部每次调用了 Generator重载的()函数(每次调用作用于生成的gen对象,仿函数保存状态), 也调用了 OutputIterator重载的=函数,
2 OutputIterator重载的=函数
insert iterators包括back_insert_iterator,front_insert_iterator和insert_iterator。主要观念是,每个insertiterators内部都维护有一个容器;容器有自己的迭代器,当客户端对insert iterators做赋值操作时,就在insert iterators中转为对该容器的迭代器做插入操作,其他的迭代器功能则被关闭。
在insert iterators的operator=操作转化为调用底层容器的push_back()或push_front()或insert()操作函数
小结:generate或generate_n在对还未定下size的容器进行生成时,使用list.back_iterator.
相关文章推荐
- 1062 : 最近公共祖先·一
- R语言利用RCurl下载验证码图片
- ZOJ 3230 Solving the Problems
- 观察者模式
- 总结
- 股票学习31(公司财务分析02)
- 2015年06月30日第一天笔记
- 用Python匹配HTML tag的时候,<.*>和<.*?>有什么区别?
- [CQOI2009][BZOJ1305] dance跳舞
- maven
- Linux安装MySQL的两种方法
- 集合 list set 常用类型说明
- CAS学习笔记(二)
- LightOJ 1153 Internet Bandwidth
- jquery
- 暑假训练.2
- Logistic应用于二分类
- 李建忠:我的互联网信仰
- 3D数学 矩阵和线性变换之旋转
- POJ1700:Crossing River(过河问题)