【C++】二十七、标准模板库STL之适配器、空间配置器

本文介绍了C++中的标准模板库STL中的适配器和空间配置器。适配器部分讲解了函数适配器,包括绑定器bind1st和bind2nd,以及取反器not1和not2。容器适配器则阐述了其作为接口转换器的角色,以及如何限制底层容器对象的接口。在空间配置器部分,文章讨论了如何解决内存碎片问题,通过空间配置器实现内存的高效管理,包括一级空间配置器和二级空间配置器的概念及工作原理。
摘要由CSDN通过智能技术生成

一、适配器

适配器可以理解为接口转换器。添加头文件:

#include <functional>

(一)函数适配器

1. 绑定器

【功能:】

绑定参数将二元函数转换成一元函数对象。

【分类:】

  • bind1st:将二元函数对象的第一个参数绑定。
  • bind2nd:将二元函数对象的第二个参数绑定。

【实例:】

函数对象greater,函数重载()实现了大于的逻辑,需要传入2个参数left,right,是二元函数对象,逻辑如下:

bool operator()(int left,int right)
{
	return (left>right);
}

【1. 在容器vector中查找小于10的数:】

使用find_if查找,第三个参数使用函数对象greater,需要传入两个参数,但是现在给定了一个参数10,那么要找到比10小的数,则left为10,right为容器元素,循环比较。需要将二元函数对象变为一元函数对象,此时left确定,所以绑定第一个参数即可,如下图所示:

在这里插入图片描述

那么代码如下:

int main()
{
   
	int arr[]={
   5,3,23,54,7,9};
	int len=sizeof(arr)/sizeof(arr[0]);
	std::vector<int>vec(arr,arr+len);
	std::vector<int>::iterator fit=std::find_if(vec.begin(),vec.end(),std::bind1st(std::greater<int>(),10));
	if(fit!=vec.end())
	{
   
		std::cout<<"vec find : "<<*fit<<std::endl;
	}
	else
	{
   
		std::cout<<"vec no exist"<<std::endl;
	}
}

在这里插入图片描述

【2. 在容器中查找大于10的数】

同理,我们绑定第二个参数,那么right=10,left为容器的数值,循环比较left>right,找到大于10的数。代码如下:

# include<iostream>
# include<deque>
# include<vector>
# include<list>
# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值