文章目录
设计模式
单例
cpp
#include <iostream>
#include <string>
#include <memory>
#include <mutex>
#include <thread>
using namespace std;
class SingleTon{
protected:
//外部不可直接操作
SingleTon(const string& value):_value(value) {
cout<< "SingleTon Construct" <<endl;
}
~SingleTon() {
cout<< "SingleTon Destruct" <<endl;
}
//静态成员 全局访问 智能指针 自动释放
static shared_ptr<SingleTon> singleton;
string _value;
public:
//禁止外部移动和拷贝
SingleTon(const SingleTon && obj) = delete;
void operator=(const SingleTon obj) = delete;
//提供静态接口 类名调用
static shared_ptr<SingleTon> getInstance(const string& value){
//call once 调用
static once_flag s_flag;
call_once(s_flag , [&](){
singleton = shared_ptr<SingleTon>(new SingleTon(value), [](SingleTon * singleton){ delete singleton;});
});
return singleton;
}
string pinrtValue(){
return _value;
}
};
//变量重置
shared_ptr<SingleTon> SingleTon::singleton = nullptr;
void printValue(const string & value){
cout<< SingleTon::getInstance(value)->pinrtValue()<<endl;
}
int main(){
thread th1(printValue,"aaa");
thread th2(printValue,"bbb");
th1.join();
th2.join();
return 0;
}
排序算法
查找算法
二分查找
cpp
#include <iostream>
#include <vector>
using namespace std;
using Rank = int;
class Fib{
private:
Rank g ,f;
public:
Fib(Rank n){
f =0; g= 1; //f 代表 fib(k -1) g 代表 fib(k)
while(0 < n--){
g = g + f;
f = g - f;
}
}
Rank get(){return g;}
Rank next(){
g = g + f;
f = g -f;
return g;
};
Rank pre(){
f = g-f;
g = g-f;
return g;
}
};
template < typename T>
static Rank fibSearch(T *A,const T &e,Rank lo,Rank hi){
for(Fib fib(hi - lo) ; lo < hi;){
while( hi -lo < fib.get()) fib.pre();
Rank mi = lo + fib.get() -1;
(e < A[mi]) ? hi = mi : lo = mi + 1;
}
return lo - 1;
}
int main(){
std::vector<Rank> test{1,3,6,8,9,11,13,17,20} ;
Rank index = fibSearch<Rank>(test.data(),14,0,test.size());
cout << "index: " << index <<endl;
return 0;
}