函数对象(for_each)未解决

#include<iostream>
using namespace std;
#include"algorithm"
#include"functional"
#include"vector"

//类模版函数
template <typename T>
class Obj
{
public:
	Obj()
	{
		n = 0;
	}
	void operator()(T & t)
	{
		n++;
		cout << t << endl;
	}
	void PtintN()
	{
		cout << n << endl;
	}
public:
	int n;
};

//模板函数
template <typename T>
void FuncprintT( T &t1)
{
	cout << t1 << endl;
}

//普通函数
void Funcprintt(int &t2)
{
	cout << t2 << endl;
}
int main01()
{
	int tem = 10;
	Obj<int > o1;//类模版
	o1(tem);
	FuncprintT<int>(tem);
	FuncprintT(tem);

	return 0;
}
int main02()
{
	vector<int > v1;
	v1.push_back(1);
	v1.push_back(2);
	v1.push_back(3);

	for_each(v1.begin(), v1.end(), Obj<int>());
	for_each(v1.begin(), v1.end(), FuncprintT<int>);
	int tem2 = 10;

	cout << " 这里是运用 函数对象作为for_each的第三个对象:\n";
	Obj<int > otem;
	for_each(v1.begin(), v1.end(), otem);//这里有疑问?遗留问题,不是每一个运算符重载都自动运行的
	//for_each(v1.begin(), v1.end(), Obj<int > otem2); 这个为什么是错误的?

	otem.PtintN();
	return 0;
}

int main()
{
	//main01();
	main02();
	system("pause");
}

  

时间: 2024-10-28 21:33:15

函数对象(for_each)未解决的相关文章

String,Array等原生引用对象prototype问题(打X未解决,打勾已解决)

1.2014年6月29日 10:51:44    原型模式     疑问一:    String类型中,动态为其加入函数时候,可以通过String.prototype.[[functionname]] = function(){}方式或者直接string.[[functionname]] = function(){},但是遇到了一个问题,当创建一个实例时,只有前者可以运行,后者报错找不到该方法,如:var msg = 'hello world' ; msg.[[functionname]] ; 

STL算法设计理念 - 函数对象和函数对象当參数和返回值

函数对象: 重载函数调用操作符的类.其对象常称为函数对象(function object),即它们是行为类似函数的对象. 一个类对象,表现出一个函数的特征,就是通过"对象名+(參数列表)"的方式使用一个类对象,假设没有上下文,全然能够把它看作一个函数对待. 这是通过重载类的operator()来实现的. "在标准库中.函数对象被广泛地使用以获得弹性".标准库中的非常多算法都能够使用函数对象或者函数来作为自定的回调行为: demo #include <iostr

boost库在工作(15)绑定器与函数对象之三

前面已经可以优美地解决两个参数的函数给算法for_each调用了,但是又会遇到这样的一种情况,当需要三个参数或者三个以上的参数给算法for_each调用呢?从STL里的绑定器bind1st,显然是不行了,因为它最多只支持两个参数,那还有什么办法呢?这时就需要使用boost库里强大的绑定器bind了.它不仅适用的情况比STL库里的多,还更加方便,更加人性化.下面就来看看怎么样绑定三个参数的类成员函数的例子,如下: [cpp] view plaincopy //调用类的成员函数,但参数两个以上. /

6 C++ Boost 函数对象

6 C++ Boost 函数对象 目录: 关于bind bind2nd程序 bind与bind2nd,效果一样 bind1st 减法 bind1st 与bind 做减法 bind2nd调用仿函数 bind 不需要ptr_fun适配 std:bind2nd 与 boost:bind 当参数大于2个,std::bind已经没办法了,boost::bind限10个 bind_api[图] bind用于函数 以及 函数指针 bind用于函数对象 bind用于函数对象,(用引用避免函数对象的拷贝) bin

C++ STL 基础及应用(7) 函数对象(仿函数)

把函数作为对象是程序设计的新思维.STL 通过重载类中的 operator() 函数实现函数对象功能,不但可以对容器中的数据进行各种各样的操作,而且能够维护自己的状态.因此,与标准 C 库函数相比,函数对象更为通用. 本章将介绍函数指针的使用.函数对象的定义.引入目的.使用方法,C++98 标准和C++11标准下 STL 内置函数对象的详细介绍.适配器类的使用.包括 bind1st bind2nd not1 not2 mem_fun mem_fun_ref ptr_fun bind ref cr

【C++】C++中的lambda表达式和函数对象

目录结构: contents structure [-] lambda表达式 lambda c++14新特性 lambda捕捉表达式 泛型lambda表达式 函数对象 函数适配器 绑定器(binder) std::mem_fn()适配器 lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读.但是从本质上来讲,lambda表达式只是一种语法糖,因为所有其能完成的工作都可以用其它稍微复杂的代码来实现.但是它简便

谓词函数、函数对象

从概念上讲,函数对象用作函数的对象:但是从实现上来说,函数对象时实现了 operate()的类的对象. 虽然函数和函数指针也可以归为函数对象,但实现了operate()的类的对象才能保存状态,才能用于STL. 我们直接看定义: 一元函数:接受一个参数的函数,如f(x). 一元谓词函数:如果一元函数返回一个BOOL类型的值,则该函数称为谓词. 二元函数:接受2个参数的函数,如f(x,y). 二元谓词函数:如果二元函数返回一个BOOL值,则该函数称为二元谓词. 之所以给返回布尔类型的函数对象专门命名

函数对象(仿函数 functor)

简单地说,函数对象就是一个重载了()运算符的类实例,它可以像一个函数一样使用. #include <iostream> using namespace std; class Add { public: int operator ()(const int &a, const int &b) { return (a + b); } double operator ()(const double &a, const double &b) { return (a + b

函数对象

函数对象也叫函数符,包括函数名.指向函数的指针和重载了()运算符的类对象.重载的()运算符将使得能够像函数那样使用类对象.如for_each()的第三个参数可以使常规函数,也可以是函数符,它将指定的函数用于区间中的每个成员. 生成器是不用参数就可以调用的函数符,一元函数是用一个参数可以调用的函数符,而返回bool值的一元函数就是谓词.返回bool类型的二元函数叫二元谓词,如sort()第三个参数就需要二元谓词,前两个参数是要STL容器要排序的迭代器.在list模板中有一个remove_if()成