标准库算法探索(一)——一元谓词定制算法

来源:互联网 发布:亿级别数据库 编辑:程序博客网 时间:2024/05/22 04:28

  • 测试引言
  • 测试代码
  • 测试结果
  • 测试结论


测试引言

之前在使用智能指针的时候发现,指针并不能适用于标准库中那些使用默认==符号进行比较的算法,但是标准库还提供了可定制的算法(《C++ Primer》第5版 P770)


测试代码

#include <iostream>#include <vector>#include <memory>#include <algorithm>using namespace std;class Engine {public:  Engine() {    num = 8;  }  Engine(int _num) {    num = _num;  }  ~Engine() {    cout << __FUNCTION__ << endl;  }  int getNum() {    return num;  }  friend bool operator == (Engine & engine1, Engine & engine2) {    if(engine1.getNum() == engine2.getNum()) {      return true;    }    return false;  }private:  int num;};class Car {public:  Car() {  }  Car(Engine* _engine) {    this->engine = _engine;  }  Car(shared_ptr<Engine> _engineSharedPtr) {    this->engineSharedPtr = _engineSharedPtr;  }  Car(vector<Engine*> _engines) {    this->engines = _engines;  }  Car(vector<shared_ptr<Engine>> _enginesSharedPtr) {    this->enginesSharedPtr = _enginesSharedPtr;  }  Engine* getEngine() {    return this->engine;  }  ~Car() {    cout << __FUNCTION__ << endl;  }private:  Engine* engine;  shared_ptr<Engine> engineSharedPtr;  vector<Engine*> engines;  vector<shared_ptr<Engine>> enginesSharedPtr;};int main(int argc, char const *argv[]) {  cout << "Test find_if with unaryPred:" << endl;  {    vector<shared_ptr<Engine>> engineVector;    engineVector.push_back(shared_ptr<Engine>(new Engine(1)));    engineVector.push_back(shared_ptr<Engine>(new Engine(2)));    engineVector.push_back(shared_ptr<Engine>(new Engine(3)));    engineVector.push_back(shared_ptr<Engine>(new Engine(4)));    shared_ptr<Engine> engine(new Engine(3));    auto iterator = find_if(engineVector.begin(), engineVector.end(), [engine](const shared_ptr<Engine> _engine){      if(*engine == *_engine) {        cout << "true" << endl;        return true;      }      cout << "false" << endl;      return false;    });    cout << (*iterator)->getNum() << endl;  }  return 0;}

测试结果

这里写图片描述


测试结论

可以使用定制的find_if操作来实现


CSDN 辣鸡 MD 编辑器,无序列表格式全丢