将成员函数用作可调用对象

19.18编写一个函数,使用count_if统计在给定的vector中有多少个空string。

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

int main()
{
    vector<string> svec={"fhhd","fdf","","hafh","",""};
    function<bool (const string&)> fcn=&string::empty;
    cout<<find_if(svec.begin(),svec.end(),fcn)-svec.begin()<<endl;
    cout<<find_if(svec.begin(),svec.end(),mem_fn(&string::empty))-svec.begin()<<endl;
    cout<<find_if(svec.begin(),svec.end(),bind(&string::empty,std::placeholders::_1))-svec.begin()<<endl;
    cout<<count_if(svec.begin(),svec.end(),fcn)<<endl;
    cout<<count_if(svec.begin(),svec.end(),mem_fn(&string::empty))<<endl;
    cout<<count_if(svec.begin(),svec.end(),bind(&string::empty,std::placeholders::_1))<<endl;
}
时间: 2024-10-20 19:23:52

将成员函数用作可调用对象的相关文章

7.2 functools--高阶函数和可调用对象

本模块主要提供了高阶函数和可调用对象. functools.cmp_to_key(func) 转换旧类型的比较函数为一个键值函数.主要用来转换Python版本2的函数参数,比如在函数sorted(),miin(),max(),heapq.nlargest(). 例子: #python 3.4 from functools import * l = [2, 8, 1, 3] def num_cmp(x, y): return x - y r = sorted(l, key = cmp_to_key

C++类的定义,成员函数的定义,对象的创建与使用

---恢复内容开始--- 类是一个模板,可用类生成一系列可用的实例.例如 int B就是生成了一个符合int的数据B,类也是一样,使用类名就可以直接生成一个实例, 该实例中包含类中所有的数据类型和对这些数据的操作方法. 首先,创建一个类 class OBJ { private: char Name[MAX]; int Num; float Price; float Total_price; protected: public: } 该类中包含三个部分,私有部分(private).保护部分(pro

C++——类的成员函数的连续调用与返回值问题

一.返回值问题 1 #include <iostream> 2 3 using namespace std; 4 5 class X 6 { 7 public: 8 int a = 3; 9 X set1(int b) 10 { 11 a = b; 12 return *this; 13 } 14 }; 15 16 int main() 17 { 18 X x; 19 x.set1(6); 20 cout << x.a; 21 22 return 0; 23 } 此处set1函数的

C/C++: C++可调用对象详解

C++中有几种可调用对象:函数,函数指针,lambda表达式,bind创建的对象,以及重载了函数调用符的类. 1. 函数 函数基础的东西(形参,实参,返回,参数传递,声明,递归...)这些,不再叙述,都是基础得不能再基础的东西了.局部对象,有了CSAPP的基础这些都不是问题,重点讲下C++11的某些重要特性和函数指针. 关于可变形参函数 C++11有两种办法传递可变形参(其实学了模板以后可以用模板的自动递归来展开所传递的参数,这个后面再说). 第一种是initializer_list,这是一个标

让类成员函数指针成为可调用对象

类成员函数指针实践上是一个指针类型,不可直接通过调用运算符()作为可调用对象调用,一般调用该类成员函数指针需要指定该指针对应的对象. 一般情况下调用类成员函数指针: // a.h #ifndef A_H #define A_H #include <iostream> using std::cout; using std::endl; class A{ public:     void print(); }; #endif // a.cpp #include "a.h" vo

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式、auto_ptr与单例模式、const成员函数、const 对象、mutable修饰符

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式.auto_ptr与单例模式.const成员函数.const 对象.mutable修饰符 前言 [例]写出面向对象的五个基本原则? 解答:单一职责原则,开放封闭原则,依赖倒置原则,接口隔离原则和里氏替换原则 里氏替换原则:子类型必须能够替换他们的基类型. 设计模式分为三种类型:创建型模式.结构型模式和行为型模式 一.static 与单例模式 1.单例模式 单例模式的意图:保证一个类仅有一个实例,并提供一个访问它

c++ 常成员函数 和 常对象

先明确几个概念: 1. 常对象只能调用常成员函数. 2. 普通对象可以调用全部成员函数. 3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针.4. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针. 5. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值:   在X类的const成员函数中,this指针的

c++中的const参数,const变量,const指针,const对象,以及const成员函数

const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”. 1.用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能.const 只能修饰输入参数: 如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地

C++中const对象和const成员函数

1?  成员函数可以声明成const函数(声明后加const) 2?  对于const对象,只能调用const成员函数 3?  Const函数和非const函数可以形成重载 4?  对于非const对象的函数调用优先选择非const成员函数 5?  对于类中的mutable数据成员,可以被const成员函数修改 // // main.cpp // Const // // Created by 06 on 15/1/24. // Copyright (c) 2015年 黄永锐. All right