首页 > 其他分享 >15.STL-适配器

15.STL-适配器

时间:2024-09-02 16:29:08浏览次数:6  
标签:begin end Person STL 适配器 int fun 15


  • 适配器
  • 函数对象适配器
  • //1、利用bind2nd 进行绑定
  • //2、继承 public binary_function<参数1 类型,参数2类型,返回值类型>
  • //3、加const
  • 取反适配器
  • 一元取反 not1
  • //1、利用not1进行取反
  • //2、继承 public unary_function<int,bool>
  • //3、加const
  • 二元取反 not2
  • 函数指针适配器
  • ptr_fun将普通函数指针 适配成函数对象
  • 成员函数适配器
  • 如果存放的是对象实体 mem_fun_ref
  • 如果存放的是对象指针 mem_fun
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <vector>
#include <algorithm>
#include <functional>
#include <string>

class MyPrint :public binary_function<int,int,void>
{
public:
	void operator()(int val , int start)const 
	{
		cout << "val = " << val << " start = " << start <<  " sum = " <<val +  start << endl;
	}
};
//1、函数对象适配器
void test01()
{
	vector<int>v;

	for (int i = 0; i < 10;i++)
	{
		v.push_back(i);
	}
	cout << "请输入起始累加值: " << endl;
	int num;
	cin >> num;

	for_each(v.begin(), v.end(), bind2nd( MyPrint(), num ) );
	//for_each(v.begin(), v.end(), bind1st(MyPrint(), num));
}

//1、利用bind2nd 进行绑定
//2、继承 public binary_function<参数1 类型,参数2类型,返回值类型>
//3、加const


//2、取反适配器
class GreaterThanFive:public unary_function<int,bool>
{
public:
	bool operator()(int val) const
	{
		return val > 5;
	}
};
void test02()
{
	vector<int>v;
	for (int i = 0; i < 10;i++)
	{
		v.push_back(i);
	}

	//一元取反
	//vector<int>::iterator pos = find_if(v.begin(), v.end(), not1( GreaterThanFive()));

	vector<int>::iterator pos = find_if(v.begin(), v.end(), not1( bind2nd( greater<int>() , 5 )));

	if (pos != v.end())
	{
		cout << "找到小于5的值为: " << *pos << endl;
	}
	else
	{
		cout << "未找到" << endl;
	}


	//二元取反
	sort(v.begin(), v.end(),  not2 (less<int>()));
	for_each(v.begin(), v.end(), [](int val){cout << val << endl; });
}

//1、利用not1进行取反
//2、继承 public unary_function<int,bool>
//3、加const


void myPrint3( int val , int start) 
{
	cout << val + start << endl;
}
//3、 函数适配器
void test03()
{
	vector<int>v;

	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	//将函数指针 适配成函数对象  ptr_fun
	for_each(v.begin(), v.end(), bind2nd(ptr_fun(myPrint3), 1000));
}


//4、成员函数适配器
class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}

	void showPerson()
	{
		cout << "成员函数----姓名: " << this->m_Name << " 年龄: " << this->m_Age << endl;
	}

	void addAge()
	{
		this->m_Age += 100;
	}

	string m_Name;
	int m_Age;
};

//void myPrint4( Person & p)
//{
//	cout << "姓名: " << p.m_Name << " 年龄: " << p.m_Age << endl;
//}

void test04()
{
	vector< Person > v;

	Person p1("aaa", 10);
	Person p2("bbb", 20);
	Person p3("ccc", 30);
	Person p4("ddd", 40);
	v.push_back(p1);
	v.push_back(p2);
	v.push_back(p3);
	v.push_back(p4);
	//利用 mem_fun_ref
	for_each(v.begin(), v.end(),  mem_fun_ref(&Person::showPerson));
	for_each(v.begin(), v.end(), mem_fun_ref(&Person::addAge));
	for_each(v.begin(), v.end(), mem_fun_ref(&Person::showPerson));
}

int main(){

//	test01();
//	test02();
//	test03();
	test04();

	system("pause");
	return EXIT_SUCCESS;
}


标签:begin,end,Person,STL,适配器,int,fun,15
From: https://blog.51cto.com/zaishu/11898889

相关文章

  • 16.STL-常用遍历算法
    常用遍历算法for_each用于遍历有返回值可以绑定参数进行输出transform搬运注意:目标容器要有容量#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;#include<vector>#include<algorithm>#include<functional>classMyPrint{publi......
  • 21.STL-常用集合算法
    常用集合算法set_intersection算法求两个set集合的交集set_union算法求两个set集合的并集set_difference算法求两个set集合的差集注意:两个集合必须是有序序列#define_CRT_SECURE_NO_WARNINGS#include<iostream>usingnamespacestd;#include<vector>#include<algori......
  • 1. STL-STL概论,STL初识
    STL概论STL六大组件容器、算法、迭代器、仿函数、适配器、空间配置器STL优点内建在C++编译器中,不需要安装额外内容不需要了解具体实现内容,只要熟练运用即可高复用,可移植,高性能容器划分序列式容器关联式容器有个key起到索引作用算法质变算法非质变算法STL......
  • Camera Link转光纤卡设计资料:153-基于Sprtan6的Full(Base) Camera Link 信号源
    基于Sprtan6的Full(Base)CameraLink信号源  一、板卡概述 板卡采用单FPGA的结构,FPGA采用XILINX的SPARTAN6系列的XC6SLX45T-1FF484I,用来实现Full 模式下的一路Camera Link转光纤功能输出。   二、主要功能和性能板卡功能参数内容......
  • 15个自然引流方法(附线索培养技巧)[信息图表]
    有机线索生成是一场营销人员的长期游戏。对于那些愿意在正确策略上投入时间的人来说,高获胜率几乎是有保证的。它是成功的有机线索生成的基石,利用高质量内容的力量和有机营销的覆盖范围来吸引高质量的线索。如果你已经准备好开始这个游戏,让我们深入探讨一下吧。有机线索生成:基......
  • OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述绘制一个简单的、粗的或填充的直立矩形。这个函数cv::rectangle绘制一个矩形轮廓或一个填充的矩形,其两个相对的顶点分别是pt1和pt2。函数原型1voidcv::rectangle( Inpu......
  • 【C++】C++STL 揭秘:Strng背后的底层逻辑
    C++语法相关知识点可以通过点击以下链接进行学习一起加油!命名空间缺省参数与函数重载C++相关特性类和对象-上篇在上篇介绍string类的使用与理解,本篇将为大家来带关于string的底层实现逻辑,当然这不是一定库里面的实现逻辑。我们设计一个string类是为了在使用string类相关......
  • 15、java 面向对象之二:对象的创建和使用(对象内存解析和匿名对象)、再谈方法(方法的重
    java面向对象之二:Ⅰ、对象的创建和使用:1、对象的内存解析:其一、描述:其二、内存解析代码1为:其三、内存解析截图1为:其四、内存解析代码2为:其五、内存解析截图2为:2、匿名对象的使用:其一、描述:其二、代码为:其三、截图为:3、自定义数组的工具类:其一、描述:其二、代码为:A、Arr......
  • 制图工具(15)建筑物轮廓简化
    内容导读在地图综合和地理信息系统(GIS)中,建筑物多边形的轮廓数据是重要的空间信息之一,建筑物轮廓通常由任意折线构成,通常呈现出以下特点:直角特征弱:实际建筑物通常具有直角特征,但边界由任意折线构成,缺乏直角特征。点数冗余:为了精确描述边界,多边形顶点数目冗余,增加了数据处......
  • 记录elasticsearch-analysis-dynamic-synonym从8.7.0升级到8.15.0所遇到的问题
    记录elasticsearch-analysis-dynamic-synonym从8.7.0升级到8.15.0所遇到的问题一、问题伊始今天打算用elasticsearch最新版本来学点东西,发现安装es插件就遇到了许多问题,于是便通过此篇博客来记录问题的整个过程。去年我学习用的elasticsearch版本为8.7.0,当时GitHub有一个大佬直......