当前位置: 首页 > news >正文

阿里巴巴做轮播网站关键词在线播放免费

阿里巴巴做轮播网站,关键词在线播放免费,深圳企业网站模板,广州定制网站建设公司C之STL的algorithm(8)之适配器(bind等)整理 注:整理一些突然学到的C知识,随时mark一下 例如:忘记的关键字用法,新关键字,新数据结构 C 的适配器整理 C之STL的algorithm&…

C++之STL的algorithm(8)之适配器(bind等)整理

注:整理一些突然学到的C++知识,随时mark一下
例如:忘记的关键字用法,新关键字,新数据结构


C++ 的适配器整理

  • C++之STL的algorithm(8)之适配器(bind等)整理
  • 一、 集合相关操作算法
  • 1、函数对象适配器
    • 1.1 利用bind2nd进行绑定
    • 1.2 继承public binary_function<参数1 类型,参数2类型,返回值类型>
  • 2. 取反适配器
    • 2.1 一元取反
    • 2.2 二元取反
  • 3. 函数指针适配器
    • 3.1 ptr_fun将普通函数指针适配成函数对象
  • 4. 成员函数适配器
    • 4.1 如果存放的是对象实体 mem_fun_ref
    • 4.2 如果存放的是对象指针 mem_fun
  • 总结


提示:本文为 C++ 适配器的写法和举例


一、 集合相关操作算法

  C++中的适配器是一种设计模式,它允许将某个类的接口转换为客户端所期望的另一种接口,从而使得原本不兼容的接口能够协同工作。在C++标准库中,适配器模式被广泛应用在函数对象和迭代器等组件上。
下面,每一种适配器模式给出简要的描述和代码示例。

1、函数对象适配器

函数对象适配器用于将一个二元函数对象(即带有两个参数的函数对象)适配为只接受一个参数的函数对象。

1.1 利用bind2nd进行绑定

bind2nd用于将一个二元函数对象的第二个参数绑定为某个固定值,生成一个新的一元函数对象。

cpp复制
#include <functional>
#include <iostream>
int main() {    
std::plus<int> plusObj;  std::binder2nd<std::plus<int>> binder(plusObj, std::placeholders::_2);binder(5); // 这其实是不合法的,因为bind2nd返回的是一个一元函数对象,需要提供一个参数   // 正确的使用方式是与其他函数适配器结合使用,例如与std::bind   auto bound_func = std::bind(binder, std::placeholders::_1);    std::cout << bound_func(3) << std::endl; // 输出8,因为相当于plusObj(3, 5) return 0;}

1.2 继承public binary_function<参数1 类型,参数2类型,返回值类型>

binary_function是一个模板基类,提供了first_argument_type、second_argument_type和result_type三个嵌套类型,用于描述二元函数对象的参数类型和返回值类型。

#include <functional>
struct MyBinaryFunction : public std::binary_function<int, int, int> {    int operator()(int a, int b) const {        return a + b;    }};
int main() {    MyBinaryFunction myFunc;std::cout << myFunc(3, 4) << std::endl; // 输出7   return 0;}

2. 取反适配器

取反适配器用于将一个函数对象的返回值取反。

2.1 一元取反

not1not1用于生成一个返回值为原函数对象返回值逻辑非的一元函数对象。

#include <functional>
#include <iostream>
bool is_positive(int x) {    return x > 0;}
int main() {    std::function<bool(int)> func = is_positive;  std::not1<std::function<bool(int)>> notFunc(func);   std::cout << notFunc(-3) << std::endl; // 输出1(true),因为-3不是正数    return 0;}

2.2 二元取反

not2not2用于生成一个返回值为原二元函数对象返回值逻辑非的一元函数对象。

 #include <functional>#include <iostream>bool compare(int a, int b) {    return a < b;}int main() {    std::function<bool(int, int)> func = compare;    std::not2<std::function<bool(int, int)>> notFunc(func);   std::cout << notFunc(5, 3) << std::endl; // 输出1(true),因为5不小于3    return 0;}

3. 函数指针适配器

函数指针适配器用于将普通函数指针适配为函数对象。

3.1 ptr_fun将普通函数指针适配成函数对象

#include <functional>
#include <iostream>
int add(int a, int b) {    return a + b;}
int main() {    std::pointer_to_binary_function<int, int, int> funcPtrAdapter(add); std::cout << funcPtrAdapter(3, 4) << std::endl; // 输出7   return 0;}

4. 成员函数适配器

成员函数适配器用于将类的成员函数适配为函数对象。

4.1 如果存放的是对象实体 mem_fun_ref

#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
struct MyClass {    int value;  MyClass(int v) : value(v) {}    int get_value() const { return value; }};int main() {    std::vector<MyClass> vec{MyClass(3), MyClass(5), MyClass(1)};    std::sort(vec.begin(), vec.end(),                std::mem_fun_ref(&MyClass::get_value));for (const auto& obj : vec) {        std::cout << obj.value << ' '; }    std::cout << std::endl; // 输出 1 3 5  return 0;}

4.2 如果存放的是对象指针 mem_fun

#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
struct MyClass {   int value;    MyClass(int v) : value(v) {}    int get_value() const { return value; }};int main() {   std::vector<MyClass*> vec{new MyClass(3), new MyClass(5), new MyClass(1)}; std::sort(vec.begin(), vec.end(),                std::mem_fun(&MyClass::get_value)); for (MyClass* obj : vec) {        std::cout << obj->value << ' ';    }    std::cout << std::endl; // 输出 1 3 5    // 释放内存   for (MyClass* obj : vec) {        delete obj;    }   return 0;}

请注意,由于std::mem_fun、std::mem_fun_ref、std::ptr_fun、std::bind2nd、std::binder2nd等函数适配器在C++11之后逐渐被认为是不推荐的,并在C++17中被移除,因此在实际编程中,我们更推荐使用std::bind、std::function以及lambda表达式来创建函数对象和适配器。上面的代码示例主要是为了展示这些适配器的使用方式,并不推荐在实际项目中使用。

总结

http://www.khdw.cn/news/56200.html

相关文章:

  • 大学生帮别人做网站网络营销的推广方式都有哪些
  • 男朋友抱着我在教室做网站国外网站加速
  • 网站制作教程切片seo引擎优化外包
  • 淄博网站设计ks免费刷粉网站推广马上刷
  • 网站仿静态和静态的区别单个药品营销策划方案
  • 做网站的公司 贵阳营销活动推广方案
  • 建网站公司 优帮云长春seo排名公司
  • 做网站需要准备什么百度广告收费
  • 导航网站php百度竞价托管一月多少钱
  • 重庆网站seo建设湛江今日头条新闻
  • 宝安网站建设哪家便宜天津百度快速优化排名
  • 内蒙古微信公众号114查优化方案怎么写
  • 园区做网站的好处西安seo推广
  • WordPress和哪个好用seo外推软件
  • 企业网站怎么扣费的百度手机版下载
  • 设计师在线设计平台seo发帖软件
  • 罗湖网站建设深圳信科方象科技服务案例
  • 武汉网站建设管理登录自动外链发布工具
  • 网站建设项目背景网站建设公司好
  • 创客 wordpress西安seo服务培训
  • 工程建设项目管理杭州专业seo
  • 专业建站外包360应用商店
  • 查询网站用什么做的做百度网站一年多少钱
  • 旅游网站建设方案成都网站制作维护
  • 湖南专业做网站公司排名建站平台哪家好
  • 惠州大亚湾疫情最新消息惠州seo网站推广
  • 赣州北京网站建设怎么推广app
  • 顶尖设计吧官网白杨seo教程
  • 当地做网站贵百度一下就知道
  • 深圳网站建设制作营销百度云盘官网