函数对象适配器

仿函数适配器 bind1st、bind2nd 将二元仿函数转为一元仿函数 仿函数适配器 not1、not2 仿函数适配器 ptr_fun 将普通函数转为函数对象,然后就可以与其它仿函数适配器一起使用了 仿函数适配器 mem_fun、mem_fun_ref 将成员函数转为适配器 class MyPrint : public binary_function<int, int, void>{ public: void operator()(int v, int val) const{ cout << "v: " << v << ", val: " << val << ", v + val: " << v + val << endl; } }; void myPrint(int v, int val){ cout << v + val << " "; } class MySort: public binary_function<int, int, bool>{ public: bool operator() (int lhs, int rhs)const{ return lhs > rhs; } }; class MyGreater: public unary_function<int, bool>{ public: bool operator()(int v)const{ return v > 50; } }; void printVec(const vector<int> &v){ for(const auto &p : v){ cout << p << " "; } cout << endl; } class Person{ public: Person(int id, int age):id(id), age(age){} void show(){ cout << "id: " << id << ", age: " << age << endl; } int id; int age; }; int main(){ vector<int> v; for(int i = 0; i < 10; ++i){ v....

January 27, 2022 · 2 min · Rick Cui

C++ 沉思录笔记

有的情况下,现在的折衷方案比未来的理想方案好得多 我考虑问题的本质是什么,再定义一个类抓住这个本质,并确保这个类能独立地工作。然后在遇到符合这个本质的问题时就使用这个类。 只要类定义正确,我就只能按照我编写它的初衷那样去用它。 C++ 哲学:抽象,实用,只为用到的东西付出代价。 类设计者的核查表: 你的类需要一个构造函数吗? 你的数据成员是私有的吗?(使用函数,可以延迟计算,不必时时计算,保证数据成员的准确性) 你的类需要一个无参的构造函数吗?(对象数组) 是不是每个构造函数初始化所有的数据成员? 类需要析构函数吗? 类需要一个虚析构函数吗? 你的类需要复制构造函数吗?(是否需要深拷贝) 你的类需要一个赋值操作符吗? 你的赋值操作符能正确地将对象赋给对象本身吗? 你的类需要定义关系操作符吗? 删除数组时你记住了用 delete[] 吗? 记得在复制构造函数和赋值操作符的参数类型中加上 const 了吗? 如果函数有引用参数,它们应该是 const 引用吗? 记得适当地声明成员函数为 const 的了吗? 代理类:用类来表示概念(RAII) class Vehicle{ public: virtual double weight() = 0; virtual void start() = 0; virtual Vehicle* copy() const = 0; virtual ~Vehicle(){} }; class RoadVehicle: public Vehicle{ /* ....

January 26, 2022 · 3 min · Rick Cui

机房预约系统案例

January 24, 2022 · 0 min · Rick Cui

switch 与 if Else 区别

while 循环中的 switch, break 只能中断 switch,不能中断 while 循环 void managerMenue(){ while(true){ cout << "这是子菜单" << endl; cout << "是否返回主菜单?" << endl; cout << "1 是" << endl; cout << "2 否" << endl; int i = 0; cin >> i; switch(i){ case 1: break; case 2: return; default: break; } // if(i == 1){ // // system("reset"); // break; // } // else if(i == 2){ // return; // } // else{ // cout << "输入有误,请重新输入" << endl; // } } cout << "这是子菜单循环外代码" << endl; } int main() { while(true){ cout << "欢迎登陆!" << endl; cout << "这是主菜单" << endl; cout << "请输入选项:" << endl; int i = 0; cin >> i; // switch(i) // { // case 1: // system("reset"); // managerMenue(); // break; // case 2: // break; // } if(i == 1){ // system("reset"); managerMenue(); // break; } else{ break; } cout << "switch 外代码" << endl; } cout << "while 外代码" << endl; return 0; }

January 24, 2022 · 1 min · Rick Cui

演讲比赛流程管理案例

January 22, 2022 · 0 min · Rick Cui