首页 > 代码库 > 函数调用运算符

函数调用运算符

14.34定义一个函数对象类,令其执行if-then-else的操作;该类型的调用运算符接受三个参数,它首先检查第一个形参,如果成功返回第二个参数的值;如果不成功返回第三个形参的值。

#include<iostream>using namespace std;class if_then_else{public:    int operator()(int a,int b,int c) const    {        if(a)            return b;        else            return c;    }};int main(){    if_then_else f;    cout<<f(3,4,5)<<endl;    return 0;}

 

14.35 编写PrintString的类,令其从istream中读取一行输入,然后返回一个表示我们所读内容的string。如果读取失败,返回空string。

#include<iostream>#include<string>#include<vector>using namespace std;class PrintString{public:    PrintString(ostream &o=cout,char c= ):os(o),sep(c) {}    void operator()(const string &s) { os<<s<<sep;}private:    ostream &os;    char sep;};int main(){    string str;    PrintString p;    if(getline(cin,str))        p(str);    else        p(string());    return 0;}

14.36 使用上面定义的类读取标准输入,将每一行保存在vector的一个元素。

#include<iostream>#include<string>#include<vector>using namespace std;class PrintString{public:    PrintString(ostream &o=cout,istream &i=cin,char c= ):os(o),is(i),sep(c) {}    void operator()(const string &s) { os<<s<<sep;}    istream& operator()(string &s) { getline(is,s); return is;}private:    ostream &os;    istream &is;    char sep;};int main(){    vector<string> vec;    string str;    PrintString p;    while(p(str))//输入        vec.push_back(str);    for(const auto  v:vec)
        p(v);//输出    /*if(getline(cin,str))        p(str);    else        p(string());*/    return 0;}

14.37编写一个类令其检查两个值是否相等。使用该对象及标准库算法编写程序,令其替换某个序列中具有给定值的所有实例。

#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;class replaces{public:    replaces(string s1="old",string s2="new"):oldval(s1),newval(s2) {}    void operator()(string &s){ if(s==oldval) s=newval;}private:    string oldval;    string newval;};int main(){    vector<string> vec={"old","a","old","b","old"};    for_each(vec.begin(),vec.end(),replaces());    for(auto v:vec)        cout<<v<<" ";    cout<<endl;    return 0;}

 

函数调用运算符