首页 > 代码库 > 函数调用运算符
函数调用运算符
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;}
函数调用运算符
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。