STL算法设计理念 - 二元函数,二元谓词以及在set中的应用

原创 2015年07月09日 19:41:05

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中的应用

demo 二元函数对象 #include #include #include #include using namespace std; template class SumVector...

STL中的二元函数binary_function

函数对象是重载了operator()的类的一个实例,operator()是函数调用运算符。 标准C++库根据operator()参数个数加以划分,主要有以下几种类型:        1  发生器:一种...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

STL中的谓词

template typename iterator_traits::difference_type count_if(InIt first,InIt last,Pred pr); 在这个模板中的pr...

C++STL之函数对象及谓词

源地址:http://www.cnblogs.com/L-hq815/archive/2012/08/23/2652269.html 概述 函数对象是重载()运算符的类类型对象,即...

C++STL之函数对象及谓词

 概述 函数对象是重载()运算符的类类型对象,即该类实现operator()()函数。STL将一组标准的函数对象定义为模板,,可以使用它们来创建一个函数对象,其中overload(...

(一二二)友元函数

由于C++控制了对类对象的访问(例如不允许访问私有成员)。于是,通常公有类方法(例如:成员函数)提供唯一的访问途径。   这样保护了私有成员,但同时又因为这种限制太严格,以致于不适合特定的编程问题...

C++中的谓词函数

标准库容器定义的操作非常少,标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖容器类型,对不同类型的容器都适用。泛型算法有一组定义在头文件,有一组定义在头文件中。      ...

C++技术点积累(8)——STL之算法汇总

C++技术点积累(8)——STL之算法汇总: 一、算法概述 1)算法部分主要由头文件,和组成。        是所有STL头文件中最大的一个,其中常用到的功能范围涉及到比较、交换、查找、遍历操作、复制...

谓词函数

c++谓词函数和仿函数 2012-07-09 12:54 by youxin, 335 阅读, 0 评论, 收藏, 编辑   什么谓词,其实就是一个判断式,说白了就是一个返回bool值的函数或者仿...

对多元二次函数的理解

对多元二次函数的理解
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)